2009-07-13 10 views
0

私はここの答えに示唆されているようにplistから配列を取得しようとしていますが、動作していません。誰かが私に行方不明を教えてもらえますか?アレイはiPhone plistから

plistは次のようになります....別の奇妙なことは、これをプレーンテキストファイルで開くことができないことです。私はそれがゴミのように見えるん.....それはプロパティリストエディタで正常に見えるとき:ここ

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 
<plist version="1.0"> 
<dict> 
<key>count</key> 
<array> 
    <integer>5</integer> 
</array> 
<key>username</key> 
<array> 
    <string>johnsmith</string> 
</array> 
</dict> 
</plist> 

は、私が使用しているコードです.....辞書がNSMUtableDictionaryあるとaccountsArrayですNSMustableArrayは.hファイルにあります。

 NSMutableDictionary *tempDictionary = [[NSMutableDictionary alloc] initWithContentsOfFile:accountsFilePath]; 

dictionary = tempDictionary; 
[tempDictionary release]; 


NSMutableArray *nameArray = [[NSMutableArray alloc] init]; 
nameArray = [dictionary objectForKey:@"username"]; 

accountsArray = nameArray; 

[nameArray release]; 

私には何か不足していますか?何かをねじ込む?

ありがとうございました...

答えて

0

私は最終的にはこのように働いてしまった:私は今、これをやっているし、今私がクラッシュしてい

dictionary = [[NSMutableDictionary alloc] initWithContentsOfFile:accountsFilePath];  


if (accountsArray == nil){ 

    accountsArray = [[NSMutableArray alloc]init]; 
} 

if (countArray == nil){ 

    countArray = [[NSMutableArray alloc]init]; 
} 



countArray = [dictionary objectForKey:@"count"]; 
accountsArray = [dictionary objectForKey:@"username"]; 
+0

は、実際に、私はこれを使用しました \t} \t \t(countArray == NIL){ \t \t \t \t countArray = [[NSMutableArrayのALLOC] INIT]自動リリース]であれば、 \t} – Xcoder

+0

-1。こんなことしないで。このコードは、すべての観点からは間違っています。 – shader

+0

コードについて何が間違っていますか? – icant

5

まあ、多くの問題があります。まずplistはおそらくバイナリプロパティリストであり、実際にはXMLプロパティリストではありません。これは物事のコード面ではあまり重要ではありませんが、開かれている問題を説明するのに役立ちます。

第2に、tempDictionaryをリリースすると、両方とも同じオブジェクトを指しているため、dictionaryもリリースされます。これは、コードが機能しない理由を説明するのに役立ちます。 autorelease、または単にdictionaryWithContentsOfFile:を試して、リリースフレーズをすべて削除してください。 (dictionaryWithContentsOfFile:はその戻り値を自動解放します)。

また、2番目のフレーズでリリースミスを繰り返します。代入演算子(=)はObjective-Cでコピーしません。それを割り当てます。

編集:プロパティ表記を使用している場合、後者は当てはまりません。プロパティが定義されていると仮定します。 self.accountsArray = nameArrayは(おそらく)配列をオブジェクトにコピーします。

再編集:正しいコード:

dictionary = [[NSMutableDictionary alloc] initWithContentsOfFile:accountsFilePath]; 
accountsArray = [dictionary objectForKey:@"username"]; 
+0

.... \t辞書= [NSMutableDictionary dictionaryWithContentsOfFile:accountsFilePath]; \t \t(accountsArray == NIL){ \t \t \t \t accountsArray = [[NSMutableArrayのALLOC] INIT]であれば、 \t} \t \t \t NSMutableArrayの* nameArray = [[NSMutableArrayのALLOC] INIT]。 \t nameArray = [辞書オブジェクトのキー:@ "username"]; \t \t \t accountsArray = nameArray; \t \t [nameArray release]; (accountsArray == NIL){ \t \t \t \t accountsArray = [[NSMutableArrayのALLOC] INIT]自動リリース]場合 \t; – Xcoder

関連する問題