从 plist 读取而不是代码数组:[NSCFArray objectForKey:]: unrecognized selector
Posted
技术标签:
【中文标题】从 plist 读取而不是代码数组:[NSCFArray objectForKey:]: unrecognized selector【英文标题】:Read from plist instead of Code array: [NSCFArray objectForKey:]: unrecognized selector 【发布时间】:2010-06-12 21:09:09 【问题描述】:我正在使用教程(现在无法访问)“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 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”
【问题讨论】:
在您的 plist 中,在 项之后的这会将一个新分配的可变数组分配给一个成员。
listOfItems = [[NSMutableArray alloc] init];
这会泄漏上述数组并将一个自动释放的、不可变的数组分配给该成员。
listOfItems = [AppDelegate.data objectForKey:@"Countries"];
稍后,当您访问 listOfItems 时,它可能已被释放。使用这个:
[listOfItems addObjectsFromArray:[AppDelegate.data objectForKey:@"Countries"]];
这一切都假定[AppDelegate.data objectForKey:@"Countries"]
正在返回一个数组。鉴于 plist,它应该,但值得仔细检查。
【讨论】:
当我使用 [listOfItems addObjectsFromArray:[AppDelegate.data objectForKey:@"Countries"]];它运行没有错误,但有空表 按照 plist,listOfItems 现在是一个数组数组。如果您需要一个字符串数组,请更改 plist。不过,这听起来像是一个新问题。 我花了 3 天时间试图弄清楚仍然无法得到我需要使用本教程 iphonesdkarticles.com/2009/01/… 从 plist 中读取的所有内容以上是关于从 plist 读取而不是代码数组:[NSCFArray objectForKey:]: unrecognized selector的主要内容,如果未能解决你的问题,请参考以下文章
Swift 中的 Array 扩展以使用 NSPropertyListReadOptions 从 plist 中读取数组