iOS Core Data executeFetchRequest返回空对象

Sco*_*tyB 4 core-data nsdictionary ios

我正在使用Core Data来存储包含可转换NSDictionary属性的实体.我存储后可以在.SQLite文件中看到一个对象,所以我觉得(?)我很擅长.但是,当我尝试检索整个实体时,我得到一个NSArray,其中一个元素[0]为零,当然,当我尝试访问任何属性时(当然)崩溃.

HVBAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
NSManagedObjectContext *context = [appDelegate managedObjectContext];

NSEntityDescription *entityDesc = [NSEntityDescription entityForName:@"Events" inManagedObjectContext:context];
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
[fetchRequest setEntity:entityDesc];

NSError *error;
NSArray *objects = [context executeFetchRequest:fetchRequest error:&error];

// [objects count] = 1 but objects[0] = nil

// and the following line crashes of course
NSMutableDictionary *data = objects[0][@"data"];
Run Code Online (Sandbox Code Playgroud)

知道我做错了什么吗?谢谢!

(请注意,我已经设置了一个带有NSDictionary属性和其他属性的Events类.)

以下是我设置实体的方法:

在此输入图像描述

Events.h:

在此输入图像描述

Events.m:

在此输入图像描述

Sco*_*tyB 8

我弄清楚发生了什么:

首先,'对象'有一行但显得"空"的原因是因为这是默认行为.除非您通过发送setReturnsObjectsAsFaults消息进行更改,否则在您明确要求之前不会检索值:

[fetchRequest setReturnsObjectsAsFaults:NO];
Run Code Online (Sandbox Code Playgroud)

注意,NSLogging对象没有这个产生"data:".

其次,最重要的是,"对象"不是NSDictionarys或NSMutableDictionarys的NSArray.因此,虽然我可以代替[objects objectAtIndex:0]" with "objects[0],我不能代替[objects[0] valueForKey:@"created"]使用[objects[0][@"created"].这就是导致崩溃的原因.

希望这有助于某人!