0
我目前正在從一個sql DB'cachedDist'列設置爲雙精度的信息。然而,當我把它放到我的應用程序中並創建我的數組時,我將它變成了一個字符串,排序顯然會關閉,18.15將在2.15之前。我如何解決在我的代碼中,所以它會將距離排序爲Double而不是String?按雙精度值排序而不是字符串值
在Bar對象中。
NSString *cachedDist
@property(nonatomic,copy) NSString *cachedDist;
@synthesize cachedDist;
我while循環在視圖控制器。
while (sqlite3_step(sqlStatement)==SQLITE_ROW) {
Bar * bar = [[Bar alloc] init];
bar.barName = [NSString stringWithUTF8String:(char *) sqlite3_column_text(sqlStatement,1)];
bar.barAddress = [NSString stringWithUTF8String:(char *) sqlite3_column_text(sqlStatement,2)];
bar.barCity = [NSString stringWithUTF8String:(char *) sqlite3_column_text(sqlStatement, 3)];
bar.barState = [NSString stringWithUTF8String:(char *) sqlite3_column_text(sqlStatement, 4)];
bar.barZip = [NSString stringWithUTF8String:(char *) sqlite3_column_text(sqlStatement, 5)];
bar.barLat = [NSString stringWithUTF8String:(char *) sqlite3_column_text(sqlStatement, 8)];
bar.barLong = [NSString stringWithUTF8String:(char *) sqlite3_column_text(sqlStatement, 9)];
if (currentLoc == nil) {
NSLog(@"current location is nil %@", currentLoc);
}else{
CLLocation *barLocation = [[CLLocation alloc] initWithLatitude:[bar.barLat doubleValue] longitude:[bar.barLong doubleValue]];
bar.cachedDist = [NSNumber numberWithDouble:[currentLoc distanceFromLocation: barLocation]/1000];
[thebars addObject:bar];
}
我的排序
NSSortDescriptor *descriptor = [[NSSortDescriptor alloc] initWithKey:@"cachedDist" ascending:YES];
sortedArray = [thebars sortedArrayUsingDescriptors:[NSArray arrayWithObject:descriptor]];
return sortedArray;
我可以改變'bar.cachedDist = distanceString:''到雙distanceDouble = [distanceString的doubleValue ];'和'bar.cachedDist = distanceDouble;'? – user1454340 2012-07-09 01:29:23
我嘗試了這一點,當我嘗試分配'bar.cachedDist = distanceDouble;'我得到一個錯誤'從不兼容的類型雙'指定給NSString' – user1454340 2012-07-09 01:35:26
我編輯包括建議完全刪除NSString部分,NSNumber或者屬性類型爲double。 – 2012-07-09 01:43:44