你好我正在尝试使用核心数据来读写用户数据。 我正在使用的代码如下:
@interface PopAdsAppDelegate : UIResponder <UIApplicationDelegate, UITabBarControllerDelegate>
{
@private
NSManagedObjectContext *managedObjectContext_;
NSManagedObjectModel *managedObjectModel_;
NSPersistentStoreCoordinator *persistentStoreCoordinator_;
}
@property (strong, nonatomic) UIWindow *window;
@property (strong, nonatomic) UITabBarController *tabBarController;
@property (nonatomic, retain, readonly) NSManagedObjectContext *managedObjectContext;
@property (nonatomic, retain, readonly) NSManagedObjectModel *managedObjectModel;
@property (nonatomic, retain, readonly) NSPersistentStoreCoordinator *persistentStoreCoordinator;
@end
我在 .m 文件中遇到错误的代码:
PopAdsAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
NSManagedObjectContext *context = [appDelegate managedObjectContext];
NSEntityDescription *entityDesc = [NSEntityDescription entityForName:@"User" inManagedObjectContext:context];
具体的这一行
NSEntityDescription *entityDesc = [NSEntityDescription entityForName:@"User" inManagedObjectContext:context];
我拥有的 .xcdatamodeld 文件名为UserData.xcdatamodeld
,我的实体名为“用户”。
说实话,我不知道代码中我应该提供UserData.xcdatamodeld
文件名的位置?!!我在示例中看到的只是实体名称!
我得到的错误是:
[PopAdsAppDelegate managedObjectContext]:无法识别的选择器发送到实例0x180d60 2011-12-25 13:36:37.008 PopAds2 [15645:707] *由于未捕获的异常'NSInvalidArgumentException'终止应用程序,原因:' - [PopAdsAppDelegate managedObjectContext]:无法识别的选择器发送到实例0x180d60' * 第一次抛出调用堆栈: (0x3435f8bf 0x345af1e5 0x34362acb 0x34361945 0x342bc680 0x3c87 0x41a9 0x35d6bc39 0x35cc36e9 0x35cc36b3 0x35cc35d5 0x323718a5 0x32366545 0x32366639 0x32366243 0x32366179 0x34333b03 0x343332cf 0x34332075 0x342b54dd 0x342b53a5 0x30b39fcd 0x37736743 0x305d 0x2ff4) 终止叫做抛出异常
答案 0 :(得分:2)
您的appDelegate没有像错误中那样的managedObjectContext方法。
修改强>
看看这些链接:
Ray Wenderlich Blog
Cocoa Dev Central
Mobile Tuts
如果没有这些,你可以随时Google it:)
答案 1 :(得分:1)
您似乎还没有合成您的财产
添加
@synthesize managedObjectContext;
到您的AppDelegate.m文件
修改强> 我以为你只是忘了初始化你的属性,但似乎你刚刚开始学习CoreData。
学习如何初始化CoreData的更有效方法是研究Apple提供的defaut实现的代码。创建一个新项目,然后在向导中选择使用CoreData。您将获得一个正常工作的代码,并看到被覆盖的两个setter。在第一次调用时,私有属性被初始化。这是延迟加载,在第一次需要时初始化。
答案 2 :(得分:1)
为什么不在Xcode中创建新项目并在向导中选择“Core Data”复选框?然后,Xcode将为您创建一个使用Core Data的新项目。您通常不必自己设置Core Data。