2014-07-17 117 views
1

我在Xcode 5.1.1中創建了一個沒有核心數據支持的項目。在現有項目中啓用核心數據不起作用

現在我正在嘗試獲取核心數據支持。

步驟:

1)文件 - >新建 - >文件 - >數據模型 - >添加。

It created : samplecd.xcdatamodeld 

2)新增實體:

myname type: String 

3)

要做到在AppDelegate.h和AppDelegate.m的變化,
我已創建了一個多項目,「核心數據「啓用,並將以下內容複製到上一個項目中。

AppDelegate.h

@property (readonly, strong, nonatomic) NSManagedObjectContext *managedObjectContext; 
@property (readonly, strong, nonatomic) NSManagedObjectModel *managedObjectModel; 
@property (readonly, strong, nonatomic) NSPersistentStoreCoordinator *persistentStoreCoordinator; 

- (void)saveContext; 
- (NSURL *)applicationDocumentsDirectory; 

AppDelegate.m

- (void)saveContext 

{ 

    NSError *error = nil; 

    NSManagedObjectContext *managedObjectContext = self.managedObjectContext; 

    if (managedObjectContext != nil) { 

    if ([managedObjectContext hasChanges] && ![managedObjectContext save:&error]) { 

     NSLog(@"Unresolved error %@, %@", error, [error userInfo]); 
     abort(); 

    } 

} 

}

#pragma mark - Core Data stack 

// Returns the managed object context for the application. 
// If the context doesn't already exist, it is created and bound to the persistent store coordinator for the application. 
- (NSManagedObjectContext *)managedObjectContext 
{ 
    if (_managedObjectContext != nil) { 
     return _managedObjectContext; 
    } 

    NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator]; 
    if (coordinator != nil) { 
     _managedObjectContext = [[NSManagedObjectContext alloc] init]; 
     [_managedObjectContext setPersistentStoreCoordinator:coordinator]; 
    } 
    return _managedObjectContext; 
} 





- (NSManagedObjectModel *)managedObjectModel 
{ 
    if (_managedObjectModel != nil) { 
     return _managedObjectModel; 
    } 
    NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"withcoredata" withExtension:@"momd"]; 
    _managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL]; 
    return _managedObjectModel; 
} 


- (NSPersistentStoreCoordinator *)persistentStoreCoordinator 
{ 
    if (_persistentStoreCoordinator != nil) { 
     return _persistentStoreCoordinator; 
    } 

    NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"withcoredata.sqlite"]; 

    NSError *error = nil; 
    _persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]]; 
    if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error]) { 


    NSLog(@"Unresolved error %@, %@", error, [error userInfo]); 
     abort(); 
    }  

    return _persistentStoreCoordinator; 
} 



#pragma mark - Application's Documents directory 

// Returns the URL to the application's Documents directory. 
- (NSURL *)applicationDocumentsDirectory 
{ 
    return [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject]; 
} 

錯誤:

我得到個e下面編譯錯誤:

"AppDelegate.m:122:35: Receiver 'NSManagedObjectContext' for class message is a forward declaration" 

AppDelegate.m:122:34: Receiver type 'NSManagedObjectContext' for instance message is a forward declaration 

如何解決這個問題?

+0

你在導入'NSManagedObjectContext.h' AppDelegate.m? –

+0

啊..看起來我需要在AppDelegate.h中#import 。不行。 :) – DrunkenMaster

+0

Dheeraj完成。:) – DrunkenMaster

回答

1

核心數據模型的名字是samplecd和您的SQLite數據庫的名字是withcoredata 兩個名字應該是在現有的項目中使用的核心數據類似。 更改名稱並讓我知道您的問題是否已解決。

+0

有兩個地方withcoredata,我必須將此名稱更改爲xcdatamodeld文件名或項目名稱本身? – DrunkenMaster

+0

使兩個名稱相同,在您的案例中用** samplecd **替換** withcoredata **。 –

+0

如果你喜歡這個,請將此帖標記爲答案。 –

0

您需要導入CoreData/CoreData.h在AppDelegte.h文件:

#import <CoreData/CoreData.h> 

和YourApp-Prefix.pch:

#ifdef __OBJC__ 
    #import <UIKit/UIKit.h> 
    #import <Foundation/Foundation.h> 
    #import <CoreData/CoreData.h> 
#endif 
相關問題