我的情況是這樣的:通訊錄API困境 - NSInternalInconsistencyException
我們正在創建一個應用程序,(除其他事項外)表示從Exchange中的公共文件夾數據。我們希望我們的iPhone應用程序顯示類似iPhone默認的聯繫人(如Apple的AddressBook應用程序),因此我們正在使用AddressBook API。但是,我們不打算在iPhone上保存任何顯示的聯繫人,它只會用於在Exchange公共文件夾中顯示聯繫人。
當我們要顯示聯繫人記錄時,我們使用'pushViewController'方法顯示'ABUnknownPersonViewController'。在代碼中,我們使用ABPersonCreate()方法創建ABRecordRef對象。部分工作正常,我看到名稱和其他細節顯示在標題(圖片佔位符旁邊)。但是,一旦我添加了任何要在UITableViewCell佈局中顯示的細節(如電話,地址等),它就不會顯示出來。更糟糕的是,第二次加載ABPersonViewController並調用「setDisplayedPerson:」方法後,應用程序崩潰。注意:第一次加載的很好,但不會顯示應該在UITableViewCells中顯示的數據。
我收到以下錯誤信息:
2010-08-10 16:23:21.624 SharepointApp[5058:207] *** Assertion failure in -[ABPersonTableView _endCellAnimationsWithContext:], /SourceCache/UIKit_Sim/UIKit-1261.5/UITableView.m:904
2010-08-10 16:23:21.627 SharepointApp[5058:207] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException',
reason: 'Invalid update: invalid number of sections. The number of sections contained in the table view after the update (1) must be equal to the
number of sections contained in the table view before the update (0), plus or minus the number of sections inserted or deleted (0 inserted, 0 deleted).'
*** Call stack at first throw:
(
0 CoreFoundation 0x02b05919 __exceptionPreprocess + 185
1 libobjc.A.dylib 0x02c535de objc_exception_throw + 47
2 CoreFoundation 0x02abe078 +[NSException raise:format:arguments:] + 136
3 Foundation 0x0019a8cf -[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:] + 116
4 UIKit 0x0041863e -[UITableView(_UITableViewPrivate) _endCellAnimationsWithContext:] + 7808
5 UIKit 0x004086d1 -[UITableView endUpdates] + 42
6 AddressBookUI 0x025a2016 -[ABPersonTableViewDataSource setCurrentTableHeaderView:] + 49
7 AddressBookUI 0x025a194d -[ABPersonTableViewDataSource updateTableHeaderView] + 928
8 AddressBookUI 0x025a2276 -[ABPersonTableViewDataSource setPersonModelController:] + 441
9 AddressBookUI 0x025ef9f0 -[ABPersonViewControllerHelper setDisplayedPeople:] + 307
10 AddressBookUI 0x025efbe5 -[ABPersonViewControllerHelper _updateDisplayedPeople] + 198
11 SharepointApp 0x0006866f -[WSPublicContactDetailViewController retrievePersonDataCompleted:] + 654
12 Foundation 0x0011ee9a __NSThreadPerformPerform + 251
13 CoreFoundation 0x02ae6d7f __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 15
14 CoreFoundation 0x02a452cb __CFRunLoopDoSources0 + 571
15 CoreFoundation 0x02a447c6 __CFRunLoopRun + 470
16 CoreFoundation 0x02a44280 CFRunLoopRunSpecific + 208
17 CoreFoundation 0x02a441a1 CFRunLoopRunInMode + 97
18 GraphicsServices 0x0307b2c8 GSEventRunModal + 217
19 GraphicsServices 0x0307b38d GSEventRun + 115
20 UIKit 0x003adb58 UIApplicationMain + 1160
21 SharepointApp 0x00002878 main + 102
22 SharepointApp 0x000027e6 start + 54
23 ??? 0x00000001 0x0 + 1
)
terminate called after throwing an instance of 'NSException'
這裏是我的代碼部分:
ABRecordRef person = ABPersonCreate();
if (person) {
ABRecordSetValue(person, kABPersonLastNameProperty, @"Schreurs", NULL);
ABRecordSetValue(person, kABPersonFirstNameProperty, @"Wolfgang", NULL);
ABRecordSetValue(person, kABPersonOrganizationProperty, @"Webstate", NULL);
ABMultiValueRef phone = ABMultiValueCreateMutable(kABStringPropertyType);
if (phone) {
ABMultiValueAddValueAndLabel(phone, @"06 123 432 23", kABPersonPhoneMobileLabel, NULL);
ABRecordSetValue(person, kABPersonPhoneProperty, phone, NULL);
CFRelease(phone);
}
[self setUnknownPersonViewDelegate:self];
[self setDisplayedPerson:person];
CFRelease(person);
}