0

メソッドで呼び出される次のメソッドを使用して、特定のアイテムをアプリに入力またはシードしようとしていますdidFinishLaunchingWithOptions

    -(void)seedItems {
    NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
    if (![ud boolForKey:@"MUserDefaultsSeedItems"]) {
        // Load seed items
        NSString *filePath = [[NSBundle mainBundle] pathForResource:@"seed" ofType:@"plist"];
        NSArray *seedItems = [NSArray arrayWithContentsOfFile:filePath];
        NSMutableArray *items = [NSMutableArray array];
        for (int i = 0; i < [seedItems count]; i++) {
            NSDictionary *seedItem = [items objectAtIndex:i];
            MShoppingItem *shoppingItem = [MShoppingItem createShoppingItemWithName:[seedItem objectForKey:@"name"] andPrice:[[seedItem objectForKey:@"price"] floatValue]];
            [items addObject:shoppingItem];
        }

        // Items path
        NSString *itemsPath = [[self documentsDirectory] stringByAppendingPathComponent:@"items.plist"];

        // Write to file
        if ([NSKeyedArchiver archiveRootObject:items toFile:itemsPath]) {
            [ud setBool:YES forKey:@"MUserDefaultsSeedItems"];
        }
    }
}

ファイルseed.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">
<array>
    <dict>
        <key>name</key>
        <string>Naranjas</string>
        <key>price</key>
        <integer>0</integer>
    </dict>
    <dict>
        <key>name</key>
        <string>Peras</string>
        <key>price</key>
        <integer>0</integer>
    </dict>
    <dict>
        <key>name</key>
        <string>Manzanas</string>
        <key>price</key>
        <integer>0</integer>
    </dict>
</array>
</plist>

問題は、 を実行NSArray *seedItems = [NSArray arrayWithContentsOfFile:filePath];すると、配列に 3 つのオブジェクトが含まれていると表示されますが、それらOut of scopeSummary Unavailable.

何かアイデアはありますか?

よろしくお願いします!

4

1 に答える 1

0

を取得したらfilePath、 を使用して存在することを確認しNSFileManagerます。存在しない場合は、ファイルが Xcode に適切に追加されていること、および「バンドル リソースのコピー」ビルド フェーズで表示されるようにアプリ ターゲットの一部として設定されていることを確認します。Xcode でシード ファイルを選択し、[ユーティリティ] インスペクターで [ターゲット メンバーシップ] を表示することで、ターゲット メンバーシップを確認できます。

質問に対する更新は、アレイがロードされていることを示していますが、デバッガーでは使用できないとリストされています。これは、配列が解放されたことを示します (もう使用されていないため)。それはタイプミスを示しています。コードを詳しく見ると、次のことがわかります。

NSDictionary *seedItem = [items objectAtIndex:i];

おそらく次のようになります。

NSDictionary *seedItem = [seedItems objectAtIndex:i];

以前にクラッシュを見ていたと思いますか?

于 2013-05-18T14:34:50.950 に答える