简单添加到数据库的 CoreData 错误
Posted
技术标签:
【中文标题】简单添加到数据库的 CoreData 错误【英文标题】:CoreData errors for simple adding to database 【发布时间】:2012-10-16 20:13:18 【问题描述】:编辑:我试图找出的错误消息位于代码的右侧,列为 cmets!!!
Xcode 不断尝试提出替代方案并拒绝让我构建。这 3 个列在代码右侧的注释标记中。他们的意思是什么?我对使用核心数据非常陌生,真的希望看看我做错了什么,只是以用户名为例(我知道我不应该这样做)!
- (IBAction)saveData:(id)sender
NSManagedObjectContext *cxt = [self managedObjectContext]; //instance method managedObjectContext not found
NSManagedObject *newContacts = [NSEntityDescription insertNewObjectForEntityForName:@"Contacts" inManagedObjectContext:cxt];
[newContacts setValue:self.username.text forKey:@"username"]; //insert NSManagedObjectModel instead of NSManagedObject...claims that it is undeclared?
username.text = @"";
NSManagedObject *newContacts = [NSEntityDescription insertNewObjectForEntityForName:@"Contacts" inManagedObjectContext:cxt]; //trying to replace NSEntityDescription with KSecAttrDescription...claims that it is undeclared
[newContacts setValue:self.password.text forKey:@"password"];
password.text = @"";
NSError *err;
if (![cxt save:&err])
NSLog(@"An error has occured: %@", [err localizedDescription]); //Instance Method -save not found
【问题讨论】:
第一个错误表明managedObjectContext
没有定义为包含此代码的任何类中的方法(或属性)。你在某个地方有这样的定义吗? (其他一些问题可能来自那个问题,所以我建议先解决它。)
解决了!但是,这是从先前对这个问题的回答中自行删除的,所以我将功劳归功于那个不知名的人。如果将来有人遇到此错误,请单击 core data.xcdatamoldeld,然后单击菜单栏(桌面)上的 Editor 部分,然后单击 set NSManagedObject Subclass 并添加它们。那么它应该可以工作了。
【参考方案1】:
CoreData 代码看起来不错,但您使用了两次NSManagedObject *newContacts
,只需使用另一个变量名或删除第二个对象的NSManagedObject *
。
另外我建议你为你的对象创建类来直接访问变量而不是[obj setValue:value forKey:@"key"];
当然很高兴看到错误输出。
【讨论】:
嗯...我不明白。你对我的对象的类是什么意思?能给我举个例子吗。哦,错误输出在右侧作为代码中的 cmets,以便人们可以知道它在代码中的位置 虽然,创建两个联系人,一个只有一个用户名,另一个只有一个密码,是可疑的。 这是一个非常好的tutorial 关于如何使用CoreData
,请在那里搜索Auto Generating Model Files
,这就是我所说的对象类的意思(对不起)【参考方案2】:
解决了!但是,这是从先前对这个问题的回答中自行删除的,所以我将功劳归功于那个不知名的人。如果将来有人遇到此错误,请单击 core data.xcdatamoldeld,然后单击菜单栏(桌面)上的 Editor 部分,然后单击 set NSManagedObject Subclass 并添加它们。那么它应该可以工作了。
【讨论】:
以上是关于简单添加到数据库的 CoreData 错误的主要内容,如果未能解决你的问题,请参考以下文章
核心数据触发错误将对象添加到 NSMutableArray?