首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >[[NSBundle mainBundle] loadNibnamed:owner:options:]崩溃

[[NSBundle mainBundle] loadNibnamed:owner:options:]崩溃
EN

Stack Overflow用户
提问于 2011-03-29 22:26:42
回答 1查看 22.5K关注 0票数 16

我想不出这个办法。我在IB中创建了一个定制的UITableViewCell。据我所知,我有单元格中的所有对象,它们都是正确连接的UILabels,所有的东西都没有任何错误地构建。当我尝试使用自定义单元格时,当我尝试加载NIB时,应用程序会停止。我已经列出了我在下面的位置。

任何帮助或暗示,或在哪里找出这一个将不胜感激。

谢谢,

约翰

下面是我的UITableViewCell接口和实现方法。我不确定我真的需要分配标签。我试过两种方法..。

代码语言:javascript
复制
//  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

代码语言:javascript
复制
//  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 JetLogger4565:207个*终止应用程序因未察觉的异常“NSUnknownKeyException”,原因:‘setValue:forUndefinedKey:该类不符合键cityArrivalTimeLabel的键值编码。’*第一次抛出时的调用堆栈:(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 0x010908 239 makeObjectsPerformSelector:+239 7 UIKit 0x0054cd23 -UINib instantiateWithOwner:选项:+ 1041 8 _createPreparedCellForGlobalRow:withIndexPath: 0x0054eab7 -NSBundle(UINSBundleAdditions) -NSBundle:owner: options:+ 168 9 JetLogger 0x0004bf18 -TripEditViewController tableView:cellForRowAtIndexPath:+ 699 10 UIKit 0x003c7b98 -UITableView(UITableViewInternal) -UITableView+ 634 11 UIKit0x003bd4cc -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_ZN2CA7Context18commit_transactionEPNS_11TransactionE +31017 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 CoreFoundation0x010906e7 __CFRunLoopDoObservers + 295 21 CoreFoundation 0x010591d7 __CFRunLoopRun + 1575 22 CoreFoundation 0x01058840 CFRunLoopRunSpecific + 208 23 CoreFoundation 0x01058761 CFRunLoopRunInMode + 97 24 GraphicsServices 0x01a081c4 GSEventRunModal + 217 25 GraphicsServices 0x01a08289 GSEventRun + 115 26 UIKit0x00360c93 UIApplicationMain + 1160 27 JetLogger 0x00001ba8 main + 102 28 JetLogger 0x00001b39 start + 53 )抛出'NSException'

实例后调用终止

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-03-29 22:58:02

在您的nib中的某个位置,您可以将一些东西连接到没有该属性的对象上的cityArrivalTimeLabel属性。确保将单元格的类更改为ArrivalTimesCell,并将该标签连接到正确的对象。

您不需要在init方法中分配/插入标签。它们只是在nib加载时被替换,所以在此之前它只是浪费RAM。

票数 42
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5479684

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档