Ошибка на [[NSBundle mainBundle] loadNibnamed: owner: options:]

Я не могу понять этого. У меня есть пользовательский UITableViewCell в IB. Насколько я могу судить, у меня есть все объекты в ячейке, которые все UILabels подключены правильно, и все строит без ошибок. Когда я пытаюсь использовать пользовательскую ячейку, приложение останавливается, когда я пытаюсь загрузить NIB. Я перечислил то, что у меня есть для этого ниже.

Любая помощь или подсказки или где посмотреть, как это понять, будет оценено.

Спасибо,

Джон

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

//  ArrivalTimesCell.h

#import <UIKit/UIKit.h>

@interface ArrivalTimesCell : UITableViewCell {
    IBOutlet UILabel *cityArrivalTimeLabel;
    IBOutlet UILabel *optimumArrivalTimeLabel;
    IBOutlet UILabel *arrivalAvoidTimesLabel;
    IBOutlet UILabel *arrivalTimeNotSetLabel;

}
@property (nonatomic, retain)IBOutlet UILabel *cityArrivalTimeLabel;
@property (nonatomic, retain)IBOutlet UILabel *optimumArrivalTimeLabel;
@property (nonatomic, retain)IBOutlet UILabel *arrivalAvoidTimesLabel;
@property (nonatomic, retain)IBOutlet UILabel *arrivalTimeNotSetLabel;

@end

//  ArrivalTimesCell.m

#import "ArrivalTimesCell.h"

@implementation ArrivalTimesCell
@synthesize arrivalTimeNotSetLabel, arrivalAvoidTimesLabel, optimumArrivalTimeLabel, cityArrivalTimeLabel;

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier{
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {
        arrivalTimeNotSetLabel = [[UILabel alloc] init];
        arrivalAvoidTimesLabel = [[UILabel alloc] init];
        optimumArrivalTimeLabel = [[UILabel alloc] init];
        cityArrivalTimeLabel = [[UILabel alloc] init];
    }
    return self;
}

- (void)setSelected:(BOOL)selected animated:(BOOL)animated{
    [super setSelected:selected animated:animated];

}

- (void)dealloc{
    [super dealloc];
    [arrivalTimeNotSetLabel release];
    arrivalTimeNotSetLabel = nil;
    [arrivalAvoidTimesLabel release];
    arrivalAvoidTimesLabel = nil;
    [optimumArrivalTimeLabel release];
    optimumArrivalTimeLabel = nil;
    [cityArrivalTimeLabel release];
    cityArrivalTimeLabel = nil;
}

@end

Вот часть cellForRowAtIndexPath для UITableView

//  TripEditViewController.m

#import "ArrivalTimesCell.h"

@implementation TripEditViewController

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

    CellIdentifier = @"ArrivalTimesCell";
    ArrivalTimesCell *cell = (ArrivalTimesCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if(cell == nil){
        NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"ArrivalTimesCell" owner:nil options:nil];

        for (id currentObject in topLevelObjects) {
            if ([currentObject isKindOfClass:[UITableViewCell class]]) {
                cell = (ArrivalTimesCell *) currentObject;
                break;
             }
         }      
    }


    cell.cityArrivalTimeLabel.text = @"Whatever"
    cell.arrivalAvoidTimesLabel.text = @"Whatever";
    cell.optimumArrivalTimeLabel.text = @"Whatever";
    cell.arrivalTimeNotSetLabel.text = @"Whatever";

    return cell;  
}

Выполнение программы останавливается в строке loadNibNamed без каких-либо комментариев в консоли. Если я "вступаю", я получаю следующее, что я не уверен, что имеет какое-либо отношение к причине моего сбоя, а вместо этого является результатом того, что nib не загружается должным образом...

2011-03-29 12: 18: 14.137 JetLogger [4565: 207] * Завершение приложения из-за неотображенного исключения "NSUnknownKeyException", причина: "[setValue: forUndefinedKey:]: этот класс не является ключевым кодом - совместим с ключевым городомArrivalTimeLabel. ' * Стек вызова при первом броске: (     0 CoreFoundation 0x0111a5a9 exceptionPreprocess + 185     1 libobjc.A.dylib 0x0126e313 objc_exception_throw + 44     2 CoreFoundation 0x0111a4e1 - [NSException raise] + 17     3 Foundation 0x000ca677 _NSSetUsingKeyValueSetter + 135     4 Foundation 0x000ca5e5 - [NSObject (NSKeyValueCoding) setValue: forKey:] + 285     5 UIKit 0x0054e30c - [UIRuntimeOutletConnection connect] + 112     6 CoreFoundation 0x010908cf - [NSArray makeObjectsPerformSelector:] + 239     7 UIKit 0x0054cd23 - [UINib instantiateWithOwner: options:] + 1041     8 UIKit 0x0054eab7 - [NSBundle (UINSBundleAdditions) loadNibNamed: owner: options:] + 168     9 JetLogger 0x0004bf18 - [TripEditViewController tableView: cellForRowAtIndexPath:] + 699     10 UIKit 0x003c7b98 - [UITableView (UITableViewInternal) _createPreparedCellForGlobalRow: withIndexPath:] + 634     11 UIKit 0x003bd4cc - [UITableView (UITableViewInternal) _createPreparedCellForGlobalRow:] + 75     12 UIKit 0x003d28cc - [UITableView (_UITableViewPrivate) _updateVisibleCellsNow:] + 1561     13 UIKit 0x003ca90c - [UITableView layoutSubviews] + 242     14 QuartzCore 0x02051a5a - [CALayer layoutSublayers] + 181     15 QuartzCore 0x02053ddc CALayerLayoutIfNeeded + 220     16 QuartzCore 0x01ff90b4 _ZN2CA7Context18commit_transactionEPNS_11TransactionE + 310     17 QuartzCore 0x01ffa294 _ZN2CA11Transaction6commitEv + 292     18 QuartzCore 0x01ffa46d _ZN2CA11Transaction17observer_callbackEP19__CFRunLoopObservermPv + 99     19 CoreFoundation 0x010fb89b __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION + 27     20 CoreFoundation 0x010906e7 __CFRunLoopDoObservers + 295     21 CoreFoundation 0x010591d7 __CFRunLoopRun + 1575     22 CoreFoundation 0x01058840 CFRunLoopRunSpecific + 208     23 CoreFoundation 0x01058761 CFRunLoopRunInMode + 97     24 GraphicsServices 0x01a081c4 GSEventRunModal + 217     25 ГрафикаУслуги 0x01a08289 GSEventRun + 115     26 UIKit 0x00360c93 UIApplicationMain + 1160     27 JetLogger 0x00001ba8 main + 102     28 JetLogger 0x00001b39 start + 53 ) terminate call после вызова экземпляра 'NSException'

Ответы

Ответ 1

Где-то в вашем nib вы подключаете что-то к свойству cityArrivalTimeLabel на объект, который не имеет этого свойства. Убедитесь, что вы 1) изменили класс ячейки на ArrivalTimesCell и 2) подключили эту метку к нужному объекту.

Вам не нужно выделять/инициализировать метки в методе init. Они просто заменяются при загрузке наконечника, поэтому до тех пор это просто пустая оперативная память.