将数组从Core Data转换为JSON字符串的最佳方法?

时间:2013-07-24 19:55:04

标签: ios objective-c json

我在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个对象。我确信这是一个非常简单的错误,我可能会以错误的方式解决这个问题。

2 个答案:

答案 0 :(得分:3)

NSJSONSerialization's documentation ...

  

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

     

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

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

可能最容易解决的问题是:

unfinishedTime.resultType = NSDictionaryResultType;

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

答案 1 :(得分:0)

尝试使用“kNilOptions”选项而不是“NSJSONWritingPrettyPrinted”