'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
之间发生了一些事情。