現在、データ転送に JSON を使用し、永続ストレージに Core Data を使用するアプリ (ターゲット iOS 6、ARC 対応) を作成しています。JSON データは、json_encode を介して PHP スクリプトによって MySQL データベースから生成されます。
私の問題は、特定のテーブルのデータで次のコードが失敗することです。
- (NSDictionary *)executeFetch:(NSString *)query
{
NSURL *requesturl = [NSURL URLWithString:[query stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
NSError *dataError = nil;
self.jsonData = [NSData dataWithContentsOfURL:requesturl options:kNilOptions error:&dataError];
NSError *error = nil;
self.jsonSerializationResult = [NSJSONSerialization JSONObjectWithData:self.jsonData options:NSJSONReadingMutableContainers|NSJSONReadingMutableLeaves error:&error];
return self.jsonSerializationResult;
}
プログラムは常に、self.jsonSerializationResult と書かれている行で EXC_BAD_ACCESS エラーでクラッシュし、Instruments はゾンビが検出されたと言っています。これは、メッセージを送信するオブジェクトの一部が nil であることを意味することはわかっていますが、それを修正する方法がわかりません... それが Instruments が言わなければならないことです:
# Address Category Event Type RefCt Timestamp Size Responsible Library Responsible Caller
0 0xa1b8a70 CFString (mutable) Malloc 1 00:01.603.081 32 Foundation -[NSPlaceholderMutableString initWithBytesNoCopy:length:encoding:freeWhenDone:]
1 0xa1b8a70 CFString (mutable) Release 0 00:01.603.137 0 Foundation newJSONValue
2 0xa1b8a70 CFString (mutable) Zombie -1 00:01.603.259 0 Foundation newJSONString
私のプログラムは、これを除くすべての JSON 出力で動作します。
{
"termin":[
{
"termin_id":"17",
"veranstaltung_id":"20",
"beginn":"2012-09-28 17:00:00",
"ende":"2012-09-28 18:00:00",
"freie_pl\u00e4tze":null
},
{
"termin_id":"18",
"veranstaltung_id":"26",
"beginn":"2012-09-28 19:00:00",
"ende":"2012-09-28 20:00:00",
"freie_pl\u00e4tze":null
},
{
"termin_id":"19",
"veranstaltung_id":"26",
"beginn":"2012-09-28 21:00:00",
"ende":"2012-09-28 22:00:00",
"freie_pl\u00e4tze":null
},
{
"termin_id":"20",
"veranstaltung_id":"46",
"beginn":"2012-09-28 19:00:00",
"ende":"2012-09-28 20:00:00",
"freie_pl\u00e4tze":null
},
{
"termin_id":"24",
"veranstaltung_id":"66",
"beginn":"2012-09-28 22:00:00",
"ende":"2012-09-28 22:30:00",
"freie_pl\u00e4tze":"120"
}
]
}
ソースの可能性のあるエラーについて考えましたが、責任があるとは思われません:
- jsonData または jsonSerializationResult は nil になる可能性があります: それらはそうではありません
- PHP が無効な JSON を生成しました: バリデーターで確認しました
- null 値: 他のテーブルでは問題ありません
誰かがアイデアを持っていますか?