Может кто-нибудь объяснить, почему это продолжает сбой на iOS 4.2? - PullRequest
0 голосов
/ 04 ноября 2010

Код работал в iOS 3.2 и в 4.2 он продолжает падать.

Вот строка, на которой он падает.

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

2010-11-04 12:20:03.060 ContactMapper[2211:207] -[__NSCFDictionary  getObjects:range:]: unrecognized selector sent to instance 0x5648e30
2010-11-04 12:20:03.062 ContactMapper[2211:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFDictionary getObjects:range:]: unrecognized selector sent to instance 0x5648e30'
*** Call stack at first throw:
(
    0   CoreFoundation                      0x0117abe9 __exceptionPreprocess + 185
    1   libobjc.A.dylib                     0x012cf5c2 objc_exception_throw + 47
    2   CoreFoundation                      0x0117c6fb -[NSObject(NSObject) doesNotRecognizeSelector:] + 187
    3   CoreFoundation                      0x010ec366 ___forwarding___ + 966
    4   CoreFoundation                      0x010ebf22 _CF_forwarding_prep_0 + 50
    5   CoreFoundation                      0x01176605 -[NSArray initWithArray:range:copyItems:] + 245
    6   CoreFoundation                      0x010e1367 +[NSArray arrayWithArray:] + 119
    7   ContactMapper                       0x00003a8d -[RootViewController tableView:cellForRowAtIndexPath:] + 1333
    8   UIKit                               0x0033a7fa -[UITableView(UITableViewInternal) _createPreparedCellForGlobalRow:withIndexPath:] + 634
    9   UIKit                               0x0033077f -[UITableView(UITableViewInternal) _createPreparedCellForGlobalRow:] + 75
    10  UIKit                               0x00345450 -[UITableView(_UITableViewPrivate) _updateVisibleCellsNow:] + 1561
    11  UIKit                               0x0033d538 -[UITableView layoutSubviews] + 242
    12  QuartzCore                          0x01fc2451 -[CALayer layoutSublayers] + 181
    13  QuartzCore                          0x01fc217c CALayerLayoutIfNeeded + 220
    14  UIKit                               0x005c7702 -[UISplitViewController willRotateToInterfaceOrientation:duration:] + 1134
    15  UIKit                               0x00373df2 -[UIViewController window:willRotateToInterfaceOrientation:duration:] + 962
    16  UIKit                               0x002edee5 -[UIWindow _setRotatableClient:toOrientation:updateStatusBar:duration:force:] + 1783
    17  UIKit                               0x002e8538 -[UIWindow _setRotatableViewOrientation:duration:force:] + 89
    18  UIKit                               0x002eb643 -[UIWindow _updateInterfaceOrientationFromDeviceOrientation:] + 164
    19  Foundation                          0x000306c1 _nsnote_callback + 145
    20  CoreFoundation                      0x01152f99 __CFXNotificationPost_old + 745
    21  CoreFoundation                      0x010d233a _CFXNotificationPostNotification + 186
    22  Foundation                          0x00026266 -[NSNotificationCenter postNotificationName:object:userInfo:] + 134
    23  UIKit                               0x00477d0a -[UIDevice setOrientation:animated:] + 228
    24  UIKit                               0x002c9637 -[UIApplication _runWithURL:payload:launchOrientation:statusBarStyle:statusBarHidden:] + 656
    25  UIKit                               0x002d3db2 -[UIApplication handleEvent:withNewEvent:] + 1533
    26  UIKit                               0x002cc202 -[UIApplication sendEvent:] + 71
    27  UIKit                               0x002d1732 _UIApplicationHandleEvent + 7576
    28  GraphicsServices                    0x01ab0a36 PurpleEventCallback + 1550
    29  CoreFoundation                      0x0115c064 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 52
    30  CoreFoundation                      0x010bc6f7 __CFRunLoopDoSource1 + 215
    31  CoreFoundation                      0x010b9983 __CFRunLoopRun + 979
    32  CoreFoundation                      0x010b9240 CFRunLoopRunSpecific + 208
    33  CoreFoundation                      0x010b9161 CFRunLoopRunInMode + 97
    34  UIKit                               0x002c8fa8 -[UIApplication _run] + 636
    35  UIKit                               0x002d542e UIApplicationMain + 1160
    36  ContactMapper                       0x00002638 main + 102
    37  ContactMapper                       0x000025c9 start + 53
)
terminate called after throwing an instance of 'NSException'

Ответы [ 3 ]

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

На первый взгляд, эта строка является вашей проблемой:

[NSArray initWithArray:range:copyItems:]

на первый взгляд, возможно, вам нужен indexPath.row, а не [indexPath row].

Поскольку iOS 4.2все еще под NDA, мы не можем говорить о конкретном коде 4.2.Мы можем, однако, поговорить о 4.1 и предыдущих версиях.

Сначала вы перейдете на страницу различий 4.2 после входа в iOS Dev Center.Это скажет вам, что изменилось в этом выпуске.Так как эти страницы показывают только релиз для выпуска, посмотрите на различия в версии 3.2-4.0, версии 4.0-4.1 и 4.1-4.2.Вы ищете изменение в API для UITableView или NSArray, о котором, очевидно, здесь не идет речь.

Во-вторых, вы собираетесь загрузить сеанс WWDC '10 с отчетами о сбоях.Это немного утомительно, но час, потраченный на изучение того, как читать отчет о сбое, ХОРОШО стоит.

Надеюсь, это поможет!

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

Полученная ошибка говорит о том, что селектор getObjects:range: отправляется на __NSCFDictionary.Итак, ясно следующее:

[[[access.filteredResults objectAtIndex:[indexPath row]] addressArray] objectAtIndex:0]

... раньше возвращал NSArray, но теперь возвращает NSDictionary.

Я не знаю, что такое access, поэтому у меня нетПредставьте себе, что еще сказать, кроме как вы можете изменить строку, которую вы указали в качестве источника ошибки, на:

NSDictionary* address = [NSDictionary dictionaryWithDictionary:[[[access.filteredResults objectAtIndex:[indexPath row]] addressArray] objectAtIndex:0]];

После того, как вы это сделаете, любой код, который использует address, явно должен такжеизмените, чтобы учесть тот факт, что вы больше не обращаетесь к массиву.

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

Вам нужен новый код iOS CookBook

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...