Одна строка продолжает падать, я думаю, что это может быть связано с CFDictionary, но не уверен. Пожалуйста помоги - PullRequest
0 голосов
/ 08 ноября 2010

У меня есть строка кода, которая продолжает сбой

NSArray* address = [NSArray arrayWithArray:[[[access.filteredResults objectAtIndex:[indexPath row]] addressArray] objectAtIndex:0]];

Я отладил его и обнаружил, что виновен addressArray.

Он определен в классе ABContact (создан Эрикой Садун, автором Cookbook для разработчиков)

@property (nonatomic, readonly) NSArray *addressArray;

Файл реализации имеет

- (NSArray *) addressArray {return [self arrayForProperty:kABPersonAddressProperty];}

Я получаю сообщение об ошибке

    -[__NSCFDictionary getObjects:range:]: unrecognized selector sent to instance 0x18aeb0
    *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFDictionary getObjects:range:]: unrecognized selector sent to instance 0x18aeb0'
    *** Call stack at first throw:
(
 0   CoreFoundation                      0x3284b987 __exceptionPreprocess + 114
 1   libobjc.A.dylib                     0x31aca49d objc_exception_throw + 24
 2   CoreFoundation                      0x3284d133 -[NSObject(NSObject) doesNotRecognizeSelector:] + 102
 3   CoreFoundation                      0x327f4aa9 ___forwarding___ + 508
 4   CoreFoundation                      0x327f4860 _CF_forwarding_prep_0 + 48
 5   CoreFoundation                      0x327dc325 -[NSArray initWithArray:range:copyItems:] + 372
 6   CoreFoundation                      0x327e94d3 +[NSArray arrayWithArray:] + 62
 7   ContactMapper                       0x00003c17 -[RootViewController tableView:cellForRowAtIndexPath:] + 1110
 8   UIKit                               0x32c46a21 -[UITableView(UITableViewInternal) _createPreparedCellForGlobalRow:withIndexPath:] + 516
 9   UIKit                               0x32c467f3 -[UITableView(UITableViewInternal) _createPreparedCellForGlobalRow:] + 34
 10  UIKit                               0x32c44d2d -[UITableView(_UITableViewPrivate) _updateVisibleCellsNow:] + 936
 11  UIKit                               0x32c43edd -[UITableView layoutSubviews] + 140
 12  UIKit                               0x32bf00cf -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 26
 13  CoreFoundation                      0x327e9bbf -[NSObject(NSObject) performSelector:withObject:] + 22
 14  QuartzCore                          0x3087b685 -[CALayer layoutSublayers] + 120
 15  QuartzCore                          0x3087b43d CALayerLayoutIfNeeded + 184
 16  QuartzCore                          0x3089e593 -[CALayer(CALayerPrivate) layoutBelowIfNeeded] + 18
 17  UIKit                               0x32c1c3f3 -[UIView(Hierarchy) layoutBelowIfNeeded] + 22
 18  UIKit                               0x32e41cb3 -[UISplitViewController willRotateToInterfaceOrientation:duration:] + 614
 19  UIKit                               0x32cadc71 -[UIViewController window:willRotateToInterfaceOrientation:duration:] + 540
 20  UIKit                               0x32ced6b3 -[UIWindow _setRotatableClient:toOrientation:updateStatusBar:duration:force:] + 1158
 21  UIKit                               0x32caef5f -[UIWindow _setRotatableViewOrientation:duration:force:] + 54
 22  UIKit                               0x32c27007 -[UIWindow _updateToInterfaceOrientation:duration:force:] + 74
 23  UIKit                               0x32c26f81 -[UIWindow _updateInterfaceOrientationFromDeviceOrientation:] + 112
 24  UIKit                               0x32c26ead -[UIWindow _handleDeviceOrientationChange:] + 88
 25  Foundation                          0x320f1623 _nsnote_callback + 142
 26  CoreFoundation                      0x327d2123 __CFXNotificationPost_old + 402
 27  CoreFoundation                      0x327d1dc3 _CFXNotificationPostNotification + 118
 28  Foundation                          0x320e0d23 -[NSNotificationCenter postNotificationName:object:userInfo:] + 70
 29  UIKit                               0x32bf0819 -[UIDevice setOrientation:animated:] + 144
 30  UIKit                               0x32c152ff -[UIApplication _runWithURL:payload:launchOrientation:statusBarStyle:statusBarHidden:] + 438
 31  UIKit                               0x32be148b -[UIApplication handleEvent:withNewEvent:] + 1114
 32  UIKit                               0x32be0ec9 -[UIApplication sendEvent:] + 44
 33  UIKit                               0x32be0907 _UIApplicationHandleEvent + 5090
 34  GraphicsServices                    0x3094af03 PurpleEventCallback + 666
 35  CoreFoundation                      0x327e06ff __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 26
 36  CoreFoundation                      0x327e06c3 __CFRunLoopDoSource1 + 166
 37  CoreFoundation                      0x327d2f7d __CFRunLoopRun + 520
 38  CoreFoundation                      0x327d2c87 CFRunLoopRunSpecific + 230
 39  CoreFoundation                      0x327d2b8f CFRunLoopRunInMode + 58
 40  UIKit                               0x32c14309 -[UIApplication _run] + 380
 41  UIKit                               0x32c11e93 UIApplicationMain + 670
 42  ContactMapper                       0x00002b67 main + 70
 43  ContactMapper                       0x00002b1c start + 40

Я не уверен, как это исправить?

access.filteredResults является NSArray

Может быть, как обрабатываются данные AddressBook (CFDictionary vs NSArray или NSDictionary). Я провел 15 часов, и я застрял. Любая помощь будет оценена.

1 Ответ

2 голосов
/ 08 ноября 2010

Неа.NSCFDictionary не имеет ничего общего с вашей проблемой.

Ваша проблема в том, что вы недооценили или перевыпустили объект массива, и этот объект умер, и другой объект (в данном случае это был словарь,но это могло быть все что угодно) было выделено по тому же адресу.Ваш код пытается создать массив со старым объектом, но в итоге передает словарь, который его заменил.

Вам необходимо выяснить, где вы необоснованно освобождаете или не можете сохранить значение * 1005.*.

Это может помочь запустить ваше приложение под инструментом Zombies, целью которого является отладка приложения, которое преждевременно выпускает или не может сохранить объект.

...