我正在尝试使用下一个方法在某些项目中填充或播种我的应用程序,该方法在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 scope
和Summary Unavailable
。
请问,好吗?
提前多多感谢!
答案 0 :(得分:0)
获得filePath
后,使用NSFileManager
检查它是否存在。如果它不存在,请检查该文件是否已正确添加到Xcode,并将其设置为应用程序目标的一部分,以便它显示在“复制包资源”构建阶段。您可以通过在Xcode中选择种子文件并在Utilities检查器中查看“Target Membership”来检查目标成员资格。
您对问题的更新表明数组已加载,但在调试器中它被列为不可用。这表明该阵列已被释放(因为它已不再使用)。这表明拼写错误。仔细看看代码,我看到了:
NSDictionary *seedItem = [items objectAtIndex:i];
应该是:
NSDictionary *seedItem = [seedItems objectAtIndex:i];
我猜你以前看到过崩溃了吗?