0

名簿で人を検索するメソッドを作成しました。結果を配列として返し、結果があれば印刷し、そうでない場合は「見つかりません」と出力します。

何らかの理由で、配列がnilでない場合は結果を出力できますが、elseは機能していません...エラーが発生することすらありません。これは、次のコードです。

main.m

NSMutableArray *result = [[NSMutableArray alloc] init];

        result = [myBook searchName:@"jack"];

        if (result != nil){
            for (AddressCards *nextCard in result)
            NSLog(@"%@          %@", nextCard.name, nextCard.email);
        }

        else
            NSLog(@"Not found");

AdressBook.m

-(NSMutableArray *) searchName:(NSString *) someName{

    NSMutableArray *namsFound = [[NSMutableArray alloc] init];

    for (AddressCards *addressCard in book){

        if ([addressCard.name rangeOfString:someName options:NSCaseInsensitiveSearch].location != NSNotFound)
            [namsFound addObject:addressCard];
    }

    return namsFound;
}

ありがとうございました

4

4 に答える 4

2

searchName:メソッドがnilを返すことはありません。空の配列を返すこともありますが、それは同じではありません。

あなたはこのようなことをするかもしれませんsearchName:

return [namsFound count]? namsFound : nil;

これは、namsFoundに1つ以上の要素がある場合(つまり、いくつかの名前が見つかった場合)にnamsFoundを返します。それ以外の場合は、nilを返します。

于 2013-03-05T02:35:55.663 に答える
0

これを変更した場合:

if (result != nil){

これに対して、それは機能するはずです:

if (result.count) {

searchメソッドでは常に配列をalloc/initするため、常にnil以外のポインターを返します。

于 2013-03-05T02:38:30.130 に答える
0

の代わりにif (result != nil){if (result.count > 0){

于 2013-03-05T02:38:53.413 に答える
0

"Not found"決して印刷されないため、印刷されませんnil。結果は常に!= nil、検索名が見つからない場合でも、配列(入力されていない配列、つまり要素がゼロの配列)を返すためです。はブール値と同等でif (result.count){あるため、最も洗練されたソリューションIMOです。したがって、戻り値はに直行します。0falseresult.count0else

于 2013-03-05T02:51:34.947 に答える