从plist而不是Code数组中读取:[NSCFArray objectForKey:]:无法识别的选择器

时间:2010-06-12 21:09:10

标签: iphone search arrays plist

我正在使用教程(现在无法访问)“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'

1 个答案:

答案 0 :(得分:0)

这会将新分配的可变数组分配给成员。

listOfItems = [[NSMutableArray alloc] init];

这会泄漏上面的数组,并为该成员分配一个自动释放的不可变数组。

listOfItems = [AppDelegate.data objectForKey:@"Countries"];

稍后,当您访问listOfItems时,它可能已被释放。使用此:

[listOfItems addObjectsFromArray:[AppDelegate.data objectForKey:@"Countries"]];

这都假设[AppDelegate.data objectForKey:@"Countries"]正在返回一个数组。考虑到它,它应该,但值得仔细检查。