Iphone 使用核心数据时出错

Iphone 使用核心数据时出错,iphone,objective-c,ios5,Iphone,Objective C,Ios5,您好,我正在尝试使用核心数据来读取和写入用户数据。 我使用的代码如下所示: AppDelegate接口 这是一条特别的路线 NSEntityDescription *entityDesc = [NSEntityDescription entityForName:@"User" inManagedObjectContext:context]; 我拥有的.xcdatamodeld文件名为UserData.xcdatamodeld,我拥有名为“User”的实体 老实说,我不知道;我不知道应该在代码中

您好,我正在尝试使用核心数据来读取和写入用户数据。 我使用的代码如下所示:

AppDelegate接口 这是一条特别的路线

NSEntityDescription *entityDesc = [NSEntityDescription entityForName:@"User" inManagedObjectContext:context];
我拥有的.xcdatamodeld文件名为
UserData.xcdatamodeld
,我拥有名为“User”的实体

老实说,我不知道;我不知道应该在代码中的什么位置提供
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 30B39FCD 0x37736743 0x305d 0x2F4) 终止调用抛出异常kill


您的appDelegate没有错误中显示的managedObjectContext方法

编辑:

看看这些链接:





如果这些还不够,您可以始终:)

您的appDelegate没有managedObjectContext方法,就像从错误中看到的那样

编辑:

看看这些链接:





如果这些还不够,你可以:)

看起来你还没有合成你的属性

到您的AppDelegate.m文件

编辑 我以为您刚刚忘记初始化属性,但似乎您才刚刚开始学习CoreData

学习如何初始化CoreData的更有效方法是研究Apple提供的defaut实现的代码。创建一个新项目,并在向导中选择使用CoreData。您将获得一个工作代码,并看到两个setter被覆盖。在第一次调用时,私有属性被初始化。这是延迟加载,在第一次需要时初始化


您还应该阅读,尤其是

您似乎还没有合成您的属性

到您的AppDelegate.m文件

编辑 我以为您刚刚忘记初始化属性,但似乎您才刚刚开始学习CoreData

学习如何初始化CoreData的更有效方法是研究Apple提供的defaut实现的代码。创建一个新项目,并在向导中选择使用CoreData。您将获得一个工作代码,并看到两个setter被覆盖。在第一次调用时,私有属性被初始化。这是延迟加载,在第一次需要时初始化


您还应该阅读,尤其是

为什么不在Xcode中创建一个新项目,并在向导中选中“核心数据”复选框?然后,Xcode将为您创建一个使用核心数据的新项目。您通常不必自己设置核心数据。

为什么不在Xcode中创建一个新项目,并在向导中选中“核心数据”复选框?然后,Xcode将为您创建一个使用核心数据的新项目。您通常不必自己设置核心数据。

对不起,我对这一点完全不熟悉。您能否提供解决方案或解决方案的链接?thanksi确实按照@luxquarta的建议合成了一些对象,但现在出现了一个错误,错误是:“+entityForName:找不到实体名称的NSManagedObjectModel,我注意到此行NSManagedObjectContext*context=[self-managedObjectContext];不初始化对象上下文!任何理想情况下,实际上您不需要在应用程序委托中合成这些对象,因为应该有初始化这些对象的方法。如果要合成它们,则不会调用这些方法,也不会初始化这些对象。试着创建一个新项目,按照@cmk的建议启用核心数据,看看这些东西是如何工作的。如果我没记错的话,默认的实现(由Apple提供的核心数据模板附带的实现)合成了managedObjectContext和managedModel,但覆盖了setter以延迟初始化私有属性。哦,我错误地宣布了我的想法。我的意思是,如果您忘记提供这样的自定义实现,那么默认(合成)getter不会初始化任何东西。您能否提供解决方案或解决方案的链接?thanksi确实按照@luxquarta的建议合成了一些对象,但现在出现了一个错误,错误是:“+entityForName:找不到实体名称的NSManagedObjectModel,我注意到此行NSManagedObjectContext*context=[self-managedObjectContext];不初始化对象上下文!任何理想情况下,实际上您不需要在应用程序委托中合成这些对象,因为应该有初始化这些对象的方法。如果要合成它们,则不会调用这些方法,也不会初始化这些对象。试着创建一个新项目,按照@cmk的建议启用核心数据,看看这些东西是如何工作的。如果我没记错的话,默认的实现(由Apple提供的核心数据模板附带的实现)合成了managedObjectContext和managedModel,但覆盖了setter以延迟初始化私有属性。哦,我错误地宣布了我的想法。我的意思是,如果您忘记提供这样的自定义实现,默认(合成)getter不会初始化任何东西。您确实需要它,以防您需要将核心数据功能添加到已经运行了一段时间的项目中…:(当然可以。但只需从模板中复制代码并将其粘贴到旧项目中,然后调整硬编码字符串。是否应该
PopAdsAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
NSManagedObjectContext *context = [appDelegate managedObjectContext];
NSEntityDescription *entityDesc = [NSEntityDescription entityForName:@"User" inManagedObjectContext:context];
NSEntityDescription *entityDesc = [NSEntityDescription entityForName:@"User" inManagedObjectContext:context];
@synthesize managedObjectContext;