0

Web サーバーに送り返すことができるように、Core Data に文字列に変換したいデータがあります。これは私がこれまでに持っているコードです:

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

" NSJSONWritingPrettyPrinted" の代わりに " kNilOptions " オプションを入れてみてください

于 2013-07-24T21:12:11.413 に答える