2011-09-30 39 views
0

我正在創建一個程序,需要我建立一個NSMutable數組,然後在點擊按鈕時將對象添加到該數組。排序可可中的對象的NSMutableArray給SIGABRT

當用戶點擊了他們想要的所有按鈕(因此將他們需要的所有對象添加到可變數組中)之後,我需要根據對象名稱對數組進行排序。 對象是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

你可能會得到一個異常,最有可能談論一個無法識別的選擇器。請張貼該錯誤。 – DarkDust

+0

確實,請編輯您的問題以包含程序轉儲到調試器控制檯的任何內容。 –

+0

添加了調試器消息,對此感到抱歉 – Thermo

回答

3

你的數組包含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 
}]; 
+0

謝謝,不知道NSImageView沒有這種方法,生病必須建立自己的比較。 – Thermo

+4

什麼'caseInsensitiveCompare'mean爲一個UIView? – vikingosegundo

相關問題