0

我在 Core Data 中有一些数据,我想将其转换为字符串,以便将其发送回我的 Web 服务器。这是我到目前为止的代码:

NSError *error = nil;
NSFetchRequest *unfinishedTime = [[NSFetchRequest alloc] init];

NSEntityDescription *timeEntity = [NSEntityDescription entityForName:@"TimeEntries" inManagedObjectContext:context];
[unfinishedTime setEntity:timeEntity];

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"timeStart != nil AND timeEnd != nil"];
[unfinishedTime setPredicate:predicate];

NSArray *timeArray = [context executeFetchRequest:unfinishedTime error:&error];

NSData *jsonData = [NSJSONSerialization dataWithJSONObject:timeArray options:NSJSONWritingPrettyPrinted error:&error];
NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];

它在 NSData 行上给了我一个错误。据我所知,timeArray 中有 5 个对象。我确信这是一个非常简单的错误,我可能会以完全错误的方式来解决这个问题。

4

2 回答 2

3

PerNSJSONSerialization的文档...

可以转换为 JSON 的对象必须具有以下属性:

顶级对象是 NSArray 或 NSDictionary。所有对象都是 NSString、NSNumber、NSArray、NSDictionary 或 NSNull 的实例。所有字典键都是 NSString 的实例。数字不是 NaN 或无穷大。

在您的情况下,顶级对象是一个NSArray但所有对象都是实例NSManagedObject(或者它的自定义子类,如果您是这样设置项目的)。

可能最简单的解决方法是:

unfinishedTime.resultType = NSDictionaryResultType;

这样,Core Data 将返回一个字典数组而不是托管对象数组,这些对象是 JSON 序列化器知道如何序列化的对象。

于 2013-07-24T21:59:10.390 回答
0

尝试放置“kNilOptions”选项而不是“NSJSONWritingPrettyPrinted”

于 2013-07-24T21:12:11.413 回答