2012-03-16 6 views
1

NSMutableDataにNSURLConnection経由でplistをロードしています。 これが終わったら、PLISTをNSMutableDictionaryに読み込みたいと思います。 オブジェクトを配列に追加してテーブルビューに表示します。 しかし、現時点ではNSMutableDataからNSMutableDictionaryにデータを抽出する方法がわかりません。 iPhoneの一部のフォルダにplistとしてローカルのデータを保存してから、plistを自分の辞書に読み込むと、それが動作します。しかし、これを直接行う方法はありませんか?NSMutableDictionaryのNSMutableData Plist

- (void) makeDataBeverage { 

    beverageArray = [[NSMutableArray alloc] init]; 

    NSMutableDictionary *beverageDic = [[NSMutableDictionary alloc]initWithContentsOfURL:[NSURL URLWithString:NSLocalizedString(@"beverage", nil)]]; 

    beverageArray = [beverageDic objectForKey:@"Beverage"]; 

は、今私はNSURLConnectionを使って同じにしたい:

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data 
{ 
    receivedData = [[NSMutableData alloc] initWithData:data]; 
} 

- (void)connectionDidFinishLoading:(NSURLConnection *)connection{ 

    NSData *data = [[NSMutableData alloc] initWithData:receivedData]; 

    NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data]; 


    NSDictionary *myDictionary = [unarchiver decodeObjectForKey:@"Beverage"]; 

    [unarchiver finishDecoding]; 

    beverageArray = [[NSMutableArray alloc] init]; 

    beverageArray = [myDictionary objectForKey:@"Beverage"]; 

    NSLog(@"%@", beverageArray); 

} 

NSURLConnectionを使用する前に私が働くこの使用しました。

+0

不正なコードの書式設定、私の敵対。だから我々は再び会う....すべての深刻さでは、あなたのコードの書式設定に取り組んでください投稿する前に、ありがとう! –

+0

送信されるデータのテンプレートはありますか?それはXML文書ですか? – Panagiotis

+0

申し訳ありませんが、悪いコード....ちょうど初心者...ロードされているデータは、辞書と配列を持つplistです – halloway4b

答えて

0

完全なデータ(*)があると仮定すると、NSPropertyListSerializationクラスを調べることをお勧めします。その+propertyListWithData:options:format:error:メソッドはあなたが探しているものを取得し、optionsパラメータを使用して変更可能な辞書または配列として結果を取得できます。

(*)ファイルに書き込んでからdictionaryWithContentsOfFile:などを使って読み取ることができますが、それは保証されているようには見えませんあなたが示したコードから。 -connection:didReceiveData:に新しいデータを作成していますが、そのデリゲートメソッドはデータが到着すると複数回呼び出すことができます。 (私はちょうどあなたのテストのためにすべての部分に到着したと思います。これは必ずしも真実ではないかもしれません。特にモバイルデバイスで)。代わりに、あなたがNSURLConnectionを起動するときに空の可変データを作成したいとします。 (または-connection:didReceiveResponse:)に追加し、-connection:didReceiveData:に追加し、-connectiondidFinishLoading:で解析します。また、プロパティリストパーサーは部分的なデータで何もできないので、iOS 5.0以降をターゲットにしている場合は、新しい+[NSURLConnection sendAsynchronousRequest:queue:completionHandler:]を使用してください。

+0

助けてくれてありがとう。あなたはNSPropertyListSerializationを見るのは間違いありませんでした。私はそれをそのようにし、それはうまく動作します。 'NSError * error; NSData * tempData = [[NSData alloc] initWithData:receivedData]; NSPropertyListFormat plistFormat; NSDictionary * temp = [NSPropertyListSerialization propertyListWithData:tempDataオプション:NSPropertyListImmutable形式:&plistFormatエラー:&エラー]; beverageArray = [temp objectForKey:@ "Beverage"]; ' – halloway4b

関連する問題