Чтение из plist вместо массива Code: [NSCFArray objectForKey:]: нераспознанный селектор - PullRequest
1 голос
/ 13 июня 2010

Я использую учебник (теперь недоступный) "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;
}

и вот как я читаю plist из My AppDelegate.m

- (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 голосов
/ 13 июня 2010

Присваивает вновь выделенный изменяемый массив члену.

listOfItems = [[NSMutableArray alloc] init];

Это приводит к утечке указанного массива и назначает члену автоматически освобожденный неизменяемый массив.

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

Позже,при доступе к listOfItems он может быть освобожден.Используйте это:

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

Все это предполагает, что [AppDelegate.data objectForKey:@"Countries"] возвращает массив.Учитывая плист, оно должно, но стоит дважды проверить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...