我有一個NSString,我想用數字搜索。看來NSNumericSearch會是合適的解決方案,但顯然只是比較:,caseInsensitiveCompare:,localizedCompare:和localizedCaseInsensitiveCompare:在iOS中執行提取操作時用作排序選擇器。 (這是一個核心數據項目)。我的理解是,這與SQLite後備數據存儲有關。iOS的NSNumericSearch解決方案
我已經嘗試將字符串投射到NSNumber。 ARC有一個錯誤,因爲NSNumber基本上是一個int。
總之,我想對數字進行排序(1,2,11,25),而不是(1,11,2,25)。我會很感激任何解決方案。
。
。
編輯:(有急事我對上面的道歉我是從我當時的電腦了,和。)
對有限種類的描述符的信息來自的Isted &哈靈頓2011年的最後一頁「iOS的核心數據」。
When doing a fetch with sort descriptors you'll need to restrict yourself to the following selectors on iOS: compare:, caseInsensitiveCompare:, localizedCompare:, localizedCaseInsensitiveCompare:.
爲了澄清,我寫了這樣的分類:
@interface NSString (SizeComparison)
-(NSComparisonResult)sizeCompare:(NSString*)otherString;
@end
@implementation NSString (SizeComparison)
-(NSComparisonResult)sizeCompare:(NSString*)otherString {
return [self compare:otherString options:NSNumericSearch];
}
@end
在fetchedResultsCntroller排序描述如下:
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"size" ascending:YES selector:@selector(sizeCompare:)];
它返回此錯誤:
*終止應用程序由於未捕獲的excep 'NSInvalidArgumentException',原因:'不受支持的NSSortDescriptor選擇器:sizeCompare:'
這似乎與Harrington的陳述一致。另外,當我說我投到NSNumber時,我試圖簡短一些,但顯然還不清楚。這是我做過什麼:
NSNumberFormatter *numformatter = [[NSNumberFormatter alloc] init];
numformatter.numberStyle = NSNumberFormatterNoStyle;
self.objectToEdit.size = [numformatter numberFromString:self.sizeTextField.text];
所以,我想數字排序一個NSString(1,2,11,25),而不是(1,11,2,25)。我仍然會欣賞任何解決方案。
你的問題有點難以理解。有一次你說你有NSString,比你說你有核心數據。另外,你的「總結」說了另一件事。請優化您的問題並提供一些代碼片段。這將大大增加得到答案的機會。 – Krizz 2011-12-30 15:09:53
NSNumber不是int。 – 2011-12-30 17:58:40
@Krizz你說得對。這是一個糟糕的帖子。我試圖澄清。 – Kurt 2011-12-30 22:35:16