0

メイン バンドルから docs dir にコピーされた plist ファイルがあります。ファイルがすでにドキュメントに存在する場合、それはコピーされません。これがどのように機能するかです。

私が抱えている問題は、appDelegate applicationDidFinishLaunching または rootViewControllers の viewDidLoad または viewDidAppear メソッドで plist 配列を初期化するときです。

docs dir にコピーされる mainbundle の plist には、文字列である項目が 1 つあります。

plist ソースには、配列ノードで囲まれた GBP という文字列が含まれていますが、これも正しいです。

このように plist NSMutableArray を初期化します

NSString *rootPath2 = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString *plistPath2 = [rootPath2 stringByAppendingPathComponent:@"currency.plist"];
theCurrency = [[NSMutableArray alloc] initWithContentsOfFile:plistPath2];

そして、viewDidLoad または viewWillAppear で、次のように配列をチェックします。

NSLog(@"Array contains %@", theCurrency);

結果はどのように null ですか?

4

3 に答える 3

0

plistの内容をテキストファイルとして開いて確認します。

ビジュアルエディターで作成されたPlistはdict、残りの要素を含むことによって作成されます(文字列が含まれるのか、文字列を含む配列が含まれるのかはわかりません)。

dictが表示された場合、plistは配列ではなく辞書に正しく逆シリアル化されます。

次のものを使用することもできます。

 [NSDictionary dictionaryWithContentsOfFile:path];
于 2012-06-28T22:23:11.617 に答える
0

配列を初期化していた場所であることがわかりました。viewdidload では、0.1 秒の遅延後に実行セレクターを提供し、セレクターは、plist の初期化と、配列の内容をログに記録するときにチェックする条件を含むメソッドを指していました。

于 2012-06-28T22:34:04.917 に答える
0

ファイルが見つかったと仮定すると、plist は辞書である必要があります。plist 内の配列には、それを識別するための名前が必要なので、次のようなものを試してください。

NSDictionary *dict = [[NSDictionary alloc]initWithContentsOfFile:plistPath2];
NSArray *currencyArray = [dict objectForKey:@"CurrencyArrayKey"];

「CurrencyArrayKey」は、plist 内の配列のキーです。

于 2012-06-28T22:22:15.703 に答える