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 scopeand Summary 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 回答