簡體   English   中英

iOS:“ NSInvalidArgumentException”,原因:“-[__ NSCFString sortedArrayUsingFunction:context:]:無法識別的選擇器已發送到實例。

[英]iOS: 'NSInvalidArgumentException', reason: '-[__NSCFString sortedArrayUsingFunction:context:]: unrecognized selector sent to instance.

嘗試獲取前10組鍵時出現以下崩潰信息。 這是引起問題的代碼。

  for (int i = 0; i < 10; i++) {

        sortedArray = [ [answers allKeys][i] sortedArrayUsingFunction:sort context:nil];

        }

但是,當我僅使用此sortedArray = [ [answers allKeys] sortedArrayUsingFunction:sort context:nil]; 我沒有崩潰。 有人可以幫我找出解決方法嗎? 我只想要前10個鍵。

我只是在這里猜測,但我認為您想要這個。

NSArray *arr = [[answers allKeys] subarrayWithRange:NSMakeRange(0, 10)];
NSArray *sorted = [arr sortedArrayUsingFunction:sort context:nil];

不幸的是,這行不通,您將需要更改架構。 這就是為什么。

字典是無序的。 這意味着, allKeys可以在任何時候以任何順序返回。 尤其是在迭代的地方使用它的方式,這不太可能,但是有可能您將擁有一個由所有相同鍵填充的數組。 如果使用我上面提供的代碼,您將獲得10個鍵的排序數組。 盡管這些鍵是唯一的,但它們不會以任何順序確定,並且應假定是隨機的。

也許您需要在過濾掉數組之前對鍵進行排序? 可能看起來像這樣:

NSArray *sorted = [[answers allKeys] sortedArrayUsingFunction:sort context:nil];
NSArray *filtered = [sorted subarrayWithRange:NSMakeRange(0, 10)];

由於[answers allkeys][i]返回NSString,您將崩潰。

也許您想要做的事情可以像這樣完成:

NSArray* sortedArray = [[answers allKeys] sortedArrayUsingFunction:sort context:nil];
NSArray* sorted1st10 = [sortedArray subarrayWithRange:NSMakeRange(0, 10)];

暫無
暫無

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

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