我正在使用教程(现在无法访问)“UITableView - 搜索表视图”。
但是我真的很难尝试从plist中读取。
我所做的改变了:
- (void)viewDidLoad {
[super viewDidLoad];
//Initialize the array.
listOfItems = [[NSMutableArray alloc] init];
TableViewAppDelegate *AppDelegate = (TableViewAppDelegate *)[[UIApplication sharedApplication] delegate];
listOfItems = [AppDelegate.data objectForKey:@"Countries"];
//Initialize the copy array.
copyListOfItems = [[NSMutableArray alloc] init];
//Set the title
self.navigationItem.title = @"Countries";
//Add the search bar
self.tableView.tableHeaderView = searchBar;
searchBar.autocorrectionType = UITextAutocorrectionTypeNo;
searching = NO;
letUserSelectRow = YES;
}
这是我从My AppDelegate.m
读取plist的方法- (void)applicationDidFinishLaunching:(UIApplication *)application {
NSString *Path = [[NSBundle mainBundle] bundlePath];
NSString *DataPath = [Path stringByAppendingPathComponent:@"Data.plist"];
NSDictionary *tempDict = [[NSDictionary alloc] initWithContentsOfFile:DataPath];
self.data = tempDict;
[tempDict release];
// Configure and show the window
[window addSubview:[navigationController view]];
[window makeKeyAndVisible];
}
这是我的plist:
<plist version="1.0">
<dict>
<key>Countries</key>
<array>
<array>
<string>USA</string>
</array>
<array>
<string>UK</string>
</array>
</array>
</dict>
</plist>
我收到此错误:
*由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'* - [NSCFArray objectForKey:]:无法识别的选择器发送到实例0xe09120'
答案 0 :(得分:0)
这会将新分配的可变数组分配给成员。
listOfItems = [[NSMutableArray alloc] init];
这会泄漏上面的数组,并为该成员分配一个自动释放的不可变数组。
listOfItems = [AppDelegate.data objectForKey:@"Countries"];
稍后,当您访问listOfItems时,它可能已被释放。使用此:
[listOfItems addObjectsFromArray:[AppDelegate.data objectForKey:@"Countries"]];
这都假设[AppDelegate.data objectForKey:@"Countries"]
正在返回一个数组。考虑到它,它应该,但值得仔细检查。