Приложение iPad падает при загрузке пера только на устройстве, а не в симуляторе - PullRequest
2 голосов
/ 03 августа 2011

Я знаю, что этот вопрос задавался ранее, и я потратил много времени, следуя предложениям в различных темах, не только на этом сайте, но безрезультатно.

Я разрабатываю приложение дляiPad, который состоит из нескольких просмотров.Каждое из этих представлений содержит UITableView.Некоторые из ячеек TableView содержат пользовательские ячейки, реализованные с помощью UITableViewCell.Проблема в том, что я могу без проблем запускать свое приложение на симуляторе iPad, но не на реальном устройстве.На устройстве - как только я пытаюсь получить доступ к представлению, которое содержит этот пользовательский UITableViewCell, о котором идет речь, оно вылетает со следующим сообщением:

2011-08-03 20:37:13.849 myApp[658:707] Creating cell: LabledTextFieldCell.xib
2011-08-03 20:37:13.866 myApp[658:707] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Could not load NIB in bundle: 'NSBundle </var/mobile/Applications/B9A24738-FA19-4A54-8CE5-813B48E6871E/iCockpit-Client.app> (loaded)' with name 'LabledTextFieldCell.xib''

Я проверил и перепроверил, и все, кажется, видеальный заказ.Файл существует - как в XCode, так и физически в файловой системе, и на него в коде указано правильное имя.

Вот строка кода, в которой происходит сбой:

[[NSBundle mainBundle] loadNibNamed:MyIdentifier owner:self options:nil];

В более широком контексте:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{

int curRow = indexPath.row;
int i = 0;

if (indexPath.section > 0) {

    while (i < indexPath.section) {

        curRow = curRow + [self sectionSize:i];
        i++;
    }

}   

UITableViewCell *cellRet;

if (indexPath.section == 1) {
     // code
} else if (indexPath.section == 2) {
    // ...
} else if (indexPath.section == 3) {
    static NSString *MyIdentifier = @"LabledSwitchCell";

    NSLog(@"Creating cell: %@", MyIdentifier);

    cellRet = [tableView dequeueReusableCellWithIdentifier:MyIdentifier];
    if (cellRet == nil) {

        // CRASHES
        // -------
        [[NSBundle mainBundle] loadNibNamed:MyIdentifier owner:self options:nil];
        // -------

        cellRet = self.cell;
        self.cell = nil;
    }

    // more code...
}

Что может стоить отметить: перо было изначально добавлено через подкласс File -> New -> New File ..., Cocoa Touch -> UIViewController, который предоставляет трифайлы - MyClassViewController.m, MyClassViewController.h и MyClassViewController.xib.Я переименовал MyClassViewController.xib (в моем случае LabledTextfieldViewController.xib) в MyClassView.xib (LabledTextfieldView.xib), что показалось мне более логичным.

Как указано выше, приложение работает в симуляторе нормально,проблема возникает только на реальном устройстве.

Моя версия XCode является последней версией Xcode 4.1 (Build 4B110).

Заранее спасибо.Любая помощь с благодарностью!

1 Ответ

6 голосов
/ 03 августа 2011

Проверьте правильность написания имени вашего файла NIB, особенно в верхнем и нижнем регистре.

Я считаю, что файловая система симулятора не чувствительна к регистру, но фактическое устройство.

...