我会尝试揭露我的问题,因为这有点复杂。
我使用了核心数据,但是存储的数据有问题。
当我使用此代码时:
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个键/值对。你能帮助我吗?
最佳答案
您似乎没有将新的托管对象正确地插入到上下文中。
它应该是:
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)->
选择一个实体->
从菜单中选择:
编辑器->创建NSManagedObjectSubclass->选择您喜欢的类文件所在的实体。
现在,您将拥有可以轻松访问的托管对象(NSManagedObject子类),并且可以从CoreData功能中受益。