4

プロジェクトでJSON-Frameworkを使用して、サーバーからのJSON送信を正常にデコードしています。

今、私はそれを逆にする必要があり、送信されるデータはCoreDataからフェッチされたNSMutableArrayであるため、問題に直面しています。

使用する場合

NSString* jsonString = [menuItems JSONRepresentation]

「MenuItemsではJSONシリアル化はサポートされていません」というメッセージが表示されます。

JSON-Frameworkがシリアル化できるように、NSMutableArrayを他の形式に変換する必要がありますか?

助けてくれてありがとう、
ミゲル

4

3 に答える 3

4

やや良い解決策を提案させてください:

MenuItemsクラスでメソッドを実装すると、配列でメソッドを直接-proxyForJson呼び出すことができるようになります。-JSONRepresentationmenuItems

@interface MenuItems(SBJson)
-(id)proxyForJson {
    return [NSDictionary dictionaryWithObjectsAndKeys:
            self.id,@"id",
            [self.modified description],@"modified",
            nil];
}
@end

お役に立てれば!

于 2010-09-21T20:52:57.377 に答える
1

私はついにそれを解決しましたが、それがそれを行うための最良/最もエレガントな方法であるかどうかはわかりません。

NSMutableArray* items = [[NSMutableArray alloc] init];
for (MenuItems* item in menuItems) {
    [items addObject:[NSArray arrayWithObjects:item.id,[item.modified description],nil]];
}
NSString *post = [NSString stringWithFormat:@"currentData=%@",
                  [items JSONRepresentation]];

説明:
最初は問題はNSMutableArrayだと思いましたが、それがその内容であることに気づきました。だから私はそれから必要な情報を取得し、JSON-Frameworkが受け入れるNSArrayとして保存しました:-)

于 2010-07-14T11:09:48.083 に答える
0

これは、辞書と配列をサーバーに送信する例です。これは1000000%で機能しました。

SBJSON *jparser = [[SBJSON new] autorelease];


NSString *ArrayjsonItems = [jparser stringWithObject:self.UrMergedArray];

NSString *DicjsonItems = [jparser stringWithObject:self.UrMergedDic];




NSLog(@"array Items :%@",self.UrMergedArray);

NSLog(@"dic Items :%@",self.UrMergedDic);




NSString *postString =[NSString stringWithFormat:@"Arrayitems=%@&Dicitems=%@",ArrayjsonItems,DicjsonItems];


NSLog(@"it is going to post : %@ \n\n",postString);



NSMutableURLRequest *request=[NSMutableURLRequest requestWithURL:snapURL];

[request setHTTPMethod:@"POST"];

[request setHTTPBody:[postString dataUsingEncoding:NSUTF8StringEncoding]];



NSURLConnection *connection=[[NSURLConnection alloc]
                             initWithRequest:request
                             delegate:self];


if (connection) {

    self.receivedData = [[NSMutableData alloc]init];

}
于 2011-07-18T16:50:17.353 に答える