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