簡體   English   中英

-[__ NSArrayI addObject:]:無法識別的選擇器已發送到實例

[英]-[__NSArrayI addObject:]: unrecognized selector sent to instance

我有以下代碼:

    override func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
    var array: AnyObject = []
    for obj in Category.allObjects() {
        if var add = obj as? Category {
            array.addObject(add.name)
            println(add.name)
        }
    }

    return String(array[section] as String)
}

我正在使用Realm數據庫,並且嘗試獲取數據庫的列之一以在節標題中打印。 我還對所有其他所需的UITableView方法(例如/ numberOfSectionsInTable等)使用相同的過程。代碼給了我這個錯誤:

    2014-10-26 20:47:33.479 Project[14631:937721] -[__NSArrayI addObject:]: unrecognized selector sent to instance 0x7fdaf270ddb0
2014-10-26 20:47:33.481 Project[14631:937721] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSArrayI addObject:]: unrecognized selector sent to instance 0x7fdaf270ddb0'
*** First throw call stack:
(
    0   CoreFoundation                      0x0000000109960f35 __exceptionPreprocess + 165
    1   libobjc.A.dylib                     0x00000001095f9bb7 objc_exception_throw + 45
    2   CoreFoundation                      0x000000010996804d -[NSObject(NSObject) doesNotRecognizeSelector:] + 205
    3   CoreFoundation                      0x00000001098c027c ___forwarding___ + 988
    4   CoreFoundation                      0x00000001098bfe18 _CF_forwarding_prep_0 + 120
    5   BuildersUtility                     0x0000000108d7f720 _TFC15BuildersUtility29ProductsDetailsViewController27numberOfSectionsInTableViewfS0_FCSo11UITableViewSi + 1408
    6   BuildersUtility                     0x0000000108d7f8ca _TToFC15BuildersUtility29ProductsDetailsViewController27numberOfSectionsInTableViewfS0_FCSo11UITableViewSi + 58
    7   UIKit                               0x000000010a478a7e -[UITableViewRowData _updateNumSections] + 84
    8   UIKit                               0x000000010a479474 -[UITableViewRowData invalidateAllSections] + 69
    9   UIKit                               0x000000010a2cdb03 -[UITableView _updateRowData] + 214
    10  UIKit                               0x000000010a2e300f -[UITableView numberOfSections] + 27
    11  UIKit                               0x000000010a4e0645 -[UITableViewController viewWillAppear:] + 97
    12  UIKit                               0x000000010a327821 -[UIViewController _setViewAppearState:isAnimating:] + 487
    13  UIKit                               0x000000010a352960 -[UINavigationController _startTransition:fromViewController:toViewController:] + 776
    14  UIKit                               0x000000010a353487 -[UINavigationController _startDeferredTransitionIfNeeded:] + 523
    15  UIKit                               0x000000010a353f47 -[UINavigationController __viewWillLayoutSubviews] + 43
    16  UIKit                               0x000000010a499509 -[UILayoutContainerView layoutSubviews] + 202
    17  UIKit                               0x000000010a277973 -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 521
    18  QuartzCore                          0x000000010a089de8 -[CALayer layoutSublayers] + 150
    19  QuartzCore                          0x000000010a07ea0e _ZN2CA5Layer16layout_if_neededEPNS_11TransactionE + 380
    20  QuartzCore                          0x000000010a07e87e _ZN2CA5Layer28layout_and_display_if_neededEPNS_11TransactionE + 24
    21  QuartzCore                          0x0000000109fec63e _ZN2CA7Context18commit_transactionEPNS_11TransactionE + 242
    22  QuartzCore                          0x0000000109fed74a _ZN2CA11Transaction6commitEv + 390
    23  QuartzCore                          0x0000000109feddb5 _ZN2CA11Transaction17observer_callbackEP19__CFRunLoopObservermPv + 89
    24  CoreFoundation                      0x0000000109895dc7 __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 23
    25  CoreFoundation                      0x0000000109895d20 __CFRunLoopDoObservers + 368
    26  CoreFoundation                      0x000000010988bb53 __CFRunLoopRun + 1123
    27  CoreFoundation                      0x000000010988b486 CFRunLoopRunSpecific + 470
    28  GraphicsServices                    0x000000010dec79f0 GSEventRunModal + 161
    29  UIKit                               0x000000010a1fe420 UIApplicationMain + 1282
    30  BuildersUtility                     0x0000000108d9589e top_level_code + 78
    31  BuildersUtility                     0x0000000108d958da main + 42
    32  libdyld.dylib                       0x000000010baaf145 start + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException
(lldb) 

順便說一句,如果您有更好的方法讓我從數據庫中提取此類項目的代碼,請大聲疾呼! :)

提前致謝

這是因為AnyObject不支持addObject方法

我想您要記住的是,您希望變量arrayAnyObject類型的數組。

您應該這樣聲明:

var array:[AnyObject] = []

然后,當您要將任何內容添加到數組時,請執行以下操作:

array.append(add.name)

除了@AnthonyKong指出的內容外,從上面的代碼中還不清楚為什么您首先需要一個AnyObject數組。

var array = [AnyObject]()

看來您實際上想要的是String數組?

var array = [String]()

那么您的return語句將簡化為:

return array[section]

當您感到滿意時,您可能還會考慮使用filterfilter代碼中幾乎沸騰的板塊邏輯。

allObjects將返回的實例RLMResults ,這是國度的兩個列表類型中的一種,另一種是RLMArray 它們都類似於NSArrays或swift數組,並實現了稱為RLMCollection的協議。 除其他外,這意味着您可以使用常規[i]表示法訪問其元素。 所以你可以簡單地寫

return Category.allObjects()[section].name

盡管您可能要在返回之前進行一些檢查。 同樣,通常不建議重復allObjects()查詢超過所需的次數,因此您可以緩存在惰性實例變量或類似實例中。 在這種情況下,類別/節標題可能沒有那么多,所以這不應該成為問題。

更重要的是,要記住,雖然RLMResults列出你得到回復在這個意義上,它是一個有序列表有序,有中沒有內在順序Category的情況下Realm ,讓你做下一次Category.allObjects()您不能真正保證以相同的順序接收對象。 因此,您實際上應該創建一個Category對象的RLMArray並將其作為另一個對象的屬性。 然后將保留訂單。

我有一個類似的問題,但是使用了NSMutableArray。 感謝上面的@Gusutafu的評論,將數組設置為@ []會將其轉換為NSArray。

我的錯誤代碼(selectedTags是NSMutableArray):

selectedTags = ([theInputParameters valueForKey:kAcronymTagsSelectedTags] != nil)
? [theInputParameters valueForKey:kAcronymTagsSelectedTags]
: @[];

這導致錯誤-[__ NSArrayI addObject:]:當我嘗試添加對象時,無法識別的選擇器發送到實例。

我的更正代碼

selectedTags = ([theInputParameters valueForKey:kAcronymTagsSelectedTags] != nil)
? [theInputParameters valueForKey:kAcronymTagsSelectedTags]
: [NSMutableArray arrayWithArray:@[]];

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM