iPhoneのplistからアレイ
-
13-09-2019 - |
質問
私はここで答えに提案されているような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は.hファイルであるNSMustableArrayです。
NSMutableDictionary *tempDictionary = [[NSMutableDictionary alloc] initWithContentsOfFile:accountsFilePath];
dictionary = tempDictionary;
[tempDictionary release];
NSMutableArray *nameArray = [[NSMutableArray alloc] init];
nameArray = [dictionary objectForKey:@"username"];
accountsArray = nameArray;
[nameArray release];
私は何かが足りないのですか?何かを台無しに?
おかげで...
解決 2
私は最終的に、それは次のように働いてしまった。
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"];
他のヒント
さて、進行中の問題がいくつかあります。最初にすべてのplistの実際のXMLプロパティリスト、おそらくバイナリープロパティリストではなく、。これは、物事のコード側の問題であまりしませんが、プレーンテキストとして開口部の問題を説明するのに役立つはずです。
第二に、tempDictionary
を解放することによって、あなたはまた、同じオブジェクトへの彼らの両方のポイントとして、dictionary
をリリースしています。これはあなたのコードが動作しない理由を説明するのに役立つはずです。 autorelease
を試してみてください、または単にalltogetherリリースフレーズをdictionaryWithContentsOfFile:
とNIX。 (dictionaryWithContentsOfFile:
は、その戻り値を自動解放されます。)
また、第二句のリリース過ちを繰り返さ。代入演算子(=
)Objective-Cでコピーしません。それの割り当ての
編集:性表記を使用する場合、後者は当てはまりません。プロパティが定義されていると仮定します。 self.accountsArray = nameArray
は(おそらく)オブジェクトに配列をコピーします。
再編集:正しいコード:
dictionary = [[NSMutableDictionary alloc] initWithContentsOfFile:accountsFilePath];
accountsArray = [dictionary objectForKey:@"username"];