2010-11-08 3 views
0

J'ai une ligne de code qui se bloqueUne ligne continue de s'écraser, je pense que cela pourrait être quelque chose à voir avec CFDictionary mais je ne suis pas sûr. S'il vous plaît aider à

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

Je débogués et j'ai découvert que addressArray est le coupable.

Il est défini dans une classe appelée ABContact (créée par Erica Sadun, auteur du livre de recettes des développeurs)

@property (nonatomic, readonly) NSArray *addressArray; 

Le fichier de mise en œuvre a

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

Le message d'erreur que je reçois est

 
    -[__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 

Je ne sais pas comment y remédier?

access.filteredResults est un NSArray

Il est peut-être la façon dont les données sont traitées AddressBook (CFDictionary vs NSArray ou NSDictionary). J'ai passé 15 heures et je suis coincé. Toute aide serait appréciée.

Répondre

2

Non. NSCFDictionary n'a rien à voir avec votre problème. Votre problème est que vous avez sous-conservé ou sur-relâché un objet tableau, et que cet objet est mort, et un autre objet (dans ce cas, c'était un dictionnaire, mais cela aurait pu être n'importe quoi) a été alloué au même adresse. Votre code essaie de créer un tableau avec l'ancien objet, mais finit par transmettre le dictionnaire qui lui a succédé à la place.

Vous devez savoir où vous libérez indûment ou ne pas conserver la valeur addressArray.

Il peut être utile de lancer votre application sous l'instrument Zombies, dont le but est de déboguer une application qui libère prématurément ou ne parvient pas à conserver un objet.

Questions connexes