无法在捆绑中加载NIB,但仅在其他NIB已经出现时才会加载

时间:2014-02-27 09:38:03

标签: objective-c xcode

'NSInternalInconsistencyException', reason: 'Could not load NIB in bundle: 'NSBundle </Users/Teguh/Library/Application Support/iPhone Simulator/7.0.3/Applications/25C54619-04C8-43B5-9E7F-3744877A2582/Recent Contact.app> (loaded)' with name 'RCContactTableViewCell''

经常有效。

通常完全相同的代码不起作用。

我不知道为什么。

如果我快速创建单元格,它会起作用 但如果我这样做,那就不行了。

基本上代码是这样的:

NSString * className = NSStringFromClass([self class]);

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

具有完全相同类的代码在程序开始时运行良好。然后在后面的电话中,由于某种原因,它不起作用。

我做了这样的代码:

PO1(className);
[[NSBundle mainBundle] loadNibNamed:className owner:self options:nil];
while (false);

第一次叫做工作

2014-02-27 17:13:20.129 Recent Contact[33098:70b] <0xa5d13d0 BGBaseTableViewCell.m:(59)> className: RCContactTableViewCell

第二次叫做工作。

然后我在背景上做点什么。一旦完成后突然在前台做了一些事情就行不通。为了帮助您查看问题,我对程序进行了一些修改。查看完全相同的代码在大多数情况下是如何工作但在一行上失败

所以基本上我调用[[RCContactTableViewCell alloc] init]并且它大部分时间都可以工作,但是在后台发生的事情之后却没有。

AssertMainThread;
[[NSOperationQueue mainQueue]addOperationWithBlock:^{
    [[RCContactTableViewCell alloc]init]; //WORKS HERE

}];


[[RCContactTableViewCell alloc]init]; //WORKS FINE HERE
[[NSOperationQueue new]addOperationWithBlock :^{
    [[NSOperationQueue mainQueue]addOperationWithBlock:^{
        [[RCContactTableViewCell alloc]init]; //WORKS HERE

    }];
    @synchronized(self)
    {
        [[NSOperationQueue mainQueue]addOperationWithBlock:^{
            [[RCContactTableViewCell alloc]init]; //WORKS HERE

        }];
        NSDate * startPopulating = [NSDate date];
        NSArray * arPeople = (__bridge_transfer NSArray*)(ABAddressBookCopyArrayOfAllPeople([RCABAddressBookHandler singleton].addressBook));
        NSMutableArray * arPeople1 = [NSMutableArray array];
        for (id somePeople in arPeople) {
            ABRecordRef ABPerson= (__bridge ABRecordRef)somePeople; //do not transfer ownership
            RCABRecordRef * abRRWrapper = [[RCABRecordRef alloc]init];
            abRRWrapper.abRecordRef=ABPerson;
            [arPeople1 addObject:abRRWrapper];
        }

        NSArray * arPeople2=[arPeople1 sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
            RCABRecordRef * abr1 = (RCABRecordRef*) obj1;
            NSDate * date1=abr1.dDatedAdded;
            RCABRecordRef * abr2 = (RCABRecordRef*) obj2;
            NSDate * date2=abr2.dDatedAdded;
            return [date2 compare:date1];
        }];
        [[NSOperationQueue mainQueue]addOperationWithBlock:^{
            [[RCContactTableViewCell alloc]init]; //FAIL TO WORK HERE
            self.allMyContacts=arPeople2.mutableCopy;//[arPeople2 subarrayWithRange:NSMakeRange(0, MIN(200,arPeople2.count))].mutableCopy;
            PO(self.allMyContacts);
            [[NSNotificationCenter defaultCenter] postNotificationName:strContactsReloaded object:self];
            PO(@([startPopulating timeIntervalSinceNow]));
        }];

    }
}];

你看到[[RCContactTableViewCell alloc] init]

这就是loadNibNamed的三分之一

它在

之前的第一行工作
[[NSOperationQueue new]addOperationWithBlock :^

之后无效
    [[NSOperationQueue mainQueue]addOperationWithBlock:^{
        [[RCContactTableViewCell alloc]init]; //FAIL TO WORK HERE

之间发生了一些事情。

0 个答案:

没有答案