0

唯一のプロパティとして文字列を持つ「TruckNumber」というコアデータエンティティがあります。文字列は通常、(文字列として) 1 ~ 3 桁の整数ですが、TMP9 などの文字を含む場合もあります。プロパティの名前は「itsNotANumma」です。ピッカーにデータを入力するためにフェッチ リクエストを実行していますが、それらがソートされておらず、その理由がわかりません。他のピッカーの他のエンティティでこの正確な手法を使用しましたが、問題はありませんでした。助けてください...関連するコードは次のとおりです。

// Fetch truck numbers
NSFetchRequest *truckNumberFetchRequest = [[NSFetchRequest alloc] init];

NSEntityDescription *truckEntity = [NSEntityDescription entityForName:@"TruckNumber" inManagedObjectContext:self.managedObjectContext];
[truckNumberFetchRequest setEntity:truckEntity];

// Sort Descriptor
NSSortDescriptor *truckDescriptor = [[NSSortDescriptor alloc] initWithKey:@"itsNotANumma" ascending:YES];

NSArray *truckSortDescriptors = [[NSArray alloc] initWithObjects:truckDescriptor, nil];
[inventoryFetchRequest setSortDescriptors:truckSortDescriptors];
error = nil;
NSArray *truckResults = [managedObjectContext executeFetchRequest:truckNumberFetchRequest error:&error];

if (error)
    NSLog(@"Unresolved error while saving context: %@, %@", error, [error userInfo]);

truckNumbersArray = [[NSMutableArray alloc] init];
for (TruckNumber *truckNumber in truckResults)
{
    [truckNumbersArray addObject:truckNumber.itsNotANumma];
}

トラック番号のデータモデルは次のとおりです。 ここに画像の説明を入力

結果は次のとおりです。

ここに画像の説明を入力

4

2 に答える 2

2

単純なタイプミスがあるようです:

[inventoryFetchRequest setSortDescriptors:truckSortDescriptors];

次のようにする必要があります。

[truckNumberFetchRequest setSortDescriptors:truckSortDescriptors];

とにかく、そのコードを読むことから推測します。

于 2012-10-11T13:25:17.277 に答える
0
[NSSortDescriptor sortDescriptorWithKey:@"self" ascending:YES comparator:^(id obj1, id obj2){
    return [(NSString*)obj1 compare:(NSString*)obj2 options:NSNumericSearch]; 
}];

1 から 5000 までの範囲の数字があれば、完璧に機能します。

于 2013-01-08T04:58:06.370 に答える