FilterArrayUsingPredicate всегда возвращает ноль NSArray? - PullRequest
0 голосов
/ 18 марта 2012

Я получаю некоторые элементы, используя CoreData, и я хочу еще немного отфильтровать эти результаты, используя FilterArrayUsingPredicate, что вызывает у меня некоторые проблемы.

CoreData Fetch:

NSFetchRequest *request = [[NSFetchRequest alloc]init];
[request setEntity:[NSEntityDescription entityForName:@"Collection" inManagedObjectContext:aContext]];
NSPredicate *pred = [NSPredicate predicateWithFormat:@"CategoryName==%@", aCategoryName];
[request setPredicate:pred];

NSError *error=nil;
NSArray *tempArray=[aContext executeFetchRequest:request error:&error];
[request release], request = nil;

NSLog(@"results: %@", tempArray);

Что дает мне эторезультат:

results: (
    "<Collection: 0x8eb1920> (entity: Collection; id: 0x8eb0aa0 <x-coredata://7C4A4A5D-691A-4F02-9450-D0D910B53903/Collection/p95> ; data: {\n    CategoryID = 22832;\n    CategoryName = \"2000 - NOURISON 2000\";\n    IsDeleted = 0;\n    ManufacturerID = 192;\n    ModifiedOn = \"2012-03-08 09:00:46 +0000\";\n    ParentCategoryID = 0;\n    PhotoName = \"\";\n    SortOrder = 0;\n})"
)

В этом случае есть только 1 результат, что не всегда так, поэтому я хочу отфильтровать больше:

Collection *collection = [[tempArray filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"ManufacturerID==%@", aManufacturerID]]  lastObject];
NSLog(@"result: %@ " , collection);

Что дает мне этот результат:

result: (null) 

Не уверен, что мне здесь не хватает, и я передаю правильный идентификатор производителя 192 для этого предиката отфильтрованного массива.

1 Ответ

1 голос
/ 18 марта 2012

Что такое идентификатор производителя?

При использовании спецификатора формата %@ он, скорее всего, должен быть [NSNumber numberWithInt:192]

или, если вы не хотите использовать обтекание NSNumber, вы можете изменить формат впредикат от %@ до %d

NSInteger aManufacturerID = 192;

Collection *collection = [[tempArray filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"ManufacturerID==%d", aManufacturerID]]  lastObject];
NSLog(@"result: %@ " , collection);
...