1

iOS アプリケーションで検索バーのロジックをプログラミングしています。NSFetchRequest から返されたエンティティを含む 1 つの NSArray "results" と、最初の配列から返されたオブジェクトを追加する空の NSMutableArray "resultados" があります。

コードは次のとおりです。

-(BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString{

    [self.resultados removeAllObjects];

    NSFetchRequest *request = [NSFetchRequest alloc];
    request.predicate = [NSPredicate predicateWithFormat:@"numero contains [cd] %@",searchString];
    request.entity = [NSEntityDescription entityForName:@"Plaza" inManagedObjectContext:self.contexto];
    NSSortDescriptor *ordenPorNumero = [[NSSortDescriptor alloc]initWithKey:@"numero" ascending:YES];
    [request setSortDescriptors:[[NSArray alloc]initWithObjects:ordenPorNumero, nil]];

    NSError *error = nil;
    NSArray *results = [self.contexto executeFetchRequest:request error:&error];

    if(error){
        NSLog(@"Ha ocurrido un error: %@ %@",error,[error userInfo]);
        abort();
    }

    [self.resultados addObjectsFromArray:results];

    return YES;

}

この行が実行されるたびに:

[self.resultados addObjectsFromArray:results];

次の例外が発生します。

2013-07-09 19:21:18.142 Actividad1[2347:c07] *** Terminating app due to uncaught exception NSRangeException', reason: '*** -[__NSArrayM objectAtIndex:]: index 9 beyond bounds [0 .. 0]

addObjectsFromArray メソッドを使用して配列の境界を超える方法がわかりません。実際、この命令を本質的に同じことを行う次のデバッグ コードに置き換えると、すべてのオブジェクトを追加していることがわかりますが、最後のオブジェクトを追加するときは、結果が返されるオブジェクトの数に関係なく、常に例外がスローされます。

int num =0;
for(id i in results){
    Plaza *p = i;
    NSLog(@"%d - %@",num,p.numero);
    num++;
    [self.resultados addObject:i];
}

私は多くのバリエーションを試しましたが、何が起こっているのかわかりません。

よろしくお願いします。

4

0 に答える 0