我会尝试揭露我的问题,因为有点复杂。 我使用核心数据,我对存储的数据有疑问。 当我使用这段代码时:
NSManagedObjectContext *context = [appDelegate managedObjectContext];
NSFetchRequest *request = [[NSFetchRequest alloc] initWithEntityName:@"ItemMessage"];
NSError *error = nil;
NSArray *results = [context executeFetchRequest:request error:&error];
NSMutableArray *values = [[NSMutableArray alloc] init];
if (error == nil) {
for (int i = 0; i<results.count; i++) {
NSLog(@"results %@",[results objectAtIndex:i]);
ItemMessage *itemMessage = [results objectAtIndex:i];
[values addObject:itemMessage];
}
ECC。问题是NSLog打印的值是正确的(“结果”包含一些东西)但是itemMessage总是包含0个键/值对(它似乎是空的)。
要了解问题是什么,我回过头来看到insertNewObjectForEntityForName
我也遇到了这个问题,这是我在核心数据中保存邮件数据时使用的代码:
for (id key in objectMessage) {
ItemMessage *itemmessage = [[ItemMessage alloc] init];
itemmessage.itemMessageId = [key objectForKey:@"itemMessageId"];
itemmessage.message = [key objectForKey:@"message"];
itemmessage.sender = [key objectForKey:@"sender"];
itemmessage.users = [key objectForKey:@"users"];
NSManagedObjectContext *context = [appDelegate managedObjectContext];
NSManagedObject *newMessage;
newMessage = [NSEntityDescription insertNewObjectForEntityForName:@"ItemMessage" inManagedObjectContext:context];
[newMessage setValue: itemmessage.itemMessageId forKey:@"itemMessageId"];
[newMessage setValue: itemmessage.message forKey:@"message"];
[newMessage setValue: itemmessage.sender forKey:@"sender"];
[newMessage setValue: itemmessage.users forKey:@"users"];
[context save:&error];
if (error != nil) {
NSLog(@"Coredata error");
}
问题是newMessage
之后的insertNewObjectForEntityForName
和setValue
还包含0个键/值对。
你能救我吗?
答案 0 :(得分:4)
您似乎没有将新的托管对象正确插入上下文中
它应该是:
for (id key in objectMessage) {
NSManagedObjectContext *context = [appDelegate managedObjectContext];
ItemMessage *itemmessage = (ItemMessage*)[NSEntityDescription insertNewObjectForEntityForName:@"ItemMessage"
inManagedObjectContext:context];
itemmessage.itemMessageId = [key objectForKey:@"itemMessageId"];
itemmessage.message = [key objectForKey:@"message"];
itemmessage.sender = [key objectForKey:@"sender"];
itemmessage.users = [key objectForKey:@"users"];
}
//save your inserts
要为您的托管对象创建一个类文件,您可以:
转到您的模型文件(xcdatamodeld) - &gt;
选择一个实体 - &gt;
从菜单中选择:
编辑器 - &GT;创建NSManagedObjectSubclass - &gt;选择您喜欢的类文件的实体。
现在,您将拥有可以轻松访问的托管对象(NSManagedObject子类),并从CoreData功能中受益。
答案 1 :(得分:2)
当你插入管理对象竞赛时,你必须调用save:方法,保存方法也应该是这样的:
newMessage = [NSEntityDescription insertNewObjectForEntityForName:@"ItemMessage" inManagedObjectContext:context];
// 2
newMessage.property1 = self.firstNameTextfield.text;
newMessage.property2 = self.lastNameTextfield.text;
if (![context save:&error]) {
NSLog(@"Error: %@", [error localizedDescription]);
}