сортировка NSMutableArray объектов в какао дает SIGABRT - PullRequest
0 голосов
/ 30 сентября 2011

Я создаю программу, которая требует от меня создания массива NSMutable, а затем добавления объектов в этот массив при нажатии кнопок.

После того, как пользователь нажал все нужные ему кнопки (следовательно, добавив всеобъекты, которые им нужны в изменяемый массив) Мне нужно отсортировать массив на основе имени объекта.Объектами являются NSImageViews, которые добавляются в массив с именами, такими как view1, view2, view40.Мне нужен способ сортировки объектов в массиве по номерам в последней цифре их имени.Я использовал

[nameOfArray sortUsingSelector:@selector(caseInsensitiveCompare:)];

, но когда я запускаю приложение, я получаю SIGABRT в этой строке.

Я посмотрел на многие другие темы и не могу найтирешение.

Любая помощь очень ценится, так как я работаю над этим уже несколько недель. Кто-нибудь знает, что я делаю неправильно?

РЕДАКТИРОВАТЬ, Вот что сказал отладчик после слов

2011-09-30 08:16:06.669 CAP helper[9874:b303] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIImageView caseInsensitiveCompare:]: unrecognized selector sent to instance 0x4e5f650'
*** Call stack at first throw:
(
0   CoreFoundation                      0x00de05a9 __exceptionPreprocess + 185
1   libobjc.A.dylib                     0x00f34313 objc_exception_throw + 44
2   CoreFoundation                      0x00de20bb -[NSObject(NSObject) doesNotRecognizeSelector:] + 187
3   CoreFoundation                      0x00d51966 ___forwarding___ + 966
4   CoreFoundation                      0x00d51522 _CF_forwarding_prep_0 + 50
5   CoreFoundation                      0x00d472f6 __CFSimpleMergeSort + 374
6   CoreFoundation                      0x00d4706c CFSortIndexes + 268
7   CoreFoundation                      0x00dda642 -[NSMutableArray sortRange:options:usingComparator:] + 274
8   CoreFoundation                      0x00d598cf -[NSMutableArray sortWithOptions:usingComparator:] + 95
9   CoreFoundation                      0x00d5983c -[NSMutableArray sortUsingSelector:] + 108
10  CAP helper                          0x0000cf81 -[RibbonStacker stackit:] + 305
11  UIKit                               0x000324fd -[UIApplication sendAction:to:from:forEvent:] + 119
12  UIKit                               0x000c2799 -[UIControl sendAction:to:forEvent:] + 67
13  UIKit                               0x000c4c2b -[UIControl(Internal) _sendActionsForEvents:withEvent:] + 527
14  UIKit                               0x000c37d8 -[UIControl touchesEnded:withEvent:] + 458
15  UIKit                               0x00056ded -[UIWindow _sendTouchesForEvent:] + 567
16  UIKit                               0x00037c37 -[UIApplication sendEvent:] + 447
17  UIKit                               0x0003cf2e _UIApplicationHandleEvent + 7576
18  GraphicsServices                    0x01019992 PurpleEventCallback + 1550
19  CoreFoundation                      0x00dc1944 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 52
20  CoreFoundation                      0x00d21cf7 __CFRunLoopDoSource1 + 215
21  CoreFoundation                      0x00d1ef83 __CFRunLoopRun + 979
22  CoreFoundation                      0x00d1e840 CFRunLoopRunSpecific + 208
23  CoreFoundation                      0x00d1e761 CFRunLoopRunInMode + 97
24  GraphicsServices                    0x010181c4 GSEventRunModal + 217
25  GraphicsServices                    0x01018289 GSEventRun + 115
26  UIKit                               0x00040c93 UIApplicationMain + 1160
27  CAP helper                          0x00002219 main + 121
28  CAP helper                          0x00002195 start + 53
29  ???                                 0x00000001 0x0 + 1
)
terminate called throwing an exception
Current language:  auto; currently objective-c>

1 Ответ

3 голосов
/ 30 сентября 2011

Ваш массив содержит UIImageView s, и ваши вызовы сортировки caseInsensitiveCompare: для этих экземпляров UIImageView, но у этого класса нет метода с таким именем.Вы должны сделать что-то вроде этого:

[nameOfArray sortUsingComparator:^(id obj1, id obj2) {
    UIImageView *view1 = obj1;
    UIImageView *view2 = obj2;

    // Somehow compare the views and return NSOrderedAscending,
    // NSOrderedDescending or NSOrderedSame, for example by calling
    // appropriate "compare:" methods.
    return myComparisonResult
}];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...