2

のクラスAddressCards.h/mと別のクラスがAddressBookあります。次に、AddressBookクラスで名前を検索するための検索メソッドを作成したいのですが、エラーが発生します。

AddressCards型ポインターを返すメソッドが必要だと思いますが、一致するものが複数ある場合に備えて名前を保持する配列が必要なため、返す方法がわかりません。

これは私の現在のコードです:

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

        NSMutableArray *results = [NSMutableArray alloc];

        for (NSString *name in book)
        {
            if ([someName caseInsensitiveCompare:name] == NSOrderedSame)
                [results addObject:name];
        }
        return results;
    }

@end

この行でエラーが発生しています:if ([someName caseInsensitiveCompare:name] == NSOrderedSame) それはsignal 1 SIGABRT私がそれが何であるかわからないことを示しています:/

これは、アドレスカードを追加する方法です。

-(void) addCard:(AddressCards *)theCard{

    [book addObject:theCard];
}
4

2 に答える 2

3

1つの問題は、配列initを作成するときに呼び出していないことです。results

NSMutableArray *results = [NSMutableArray alloc];

する必要があります:

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

これは間違いなくSIGABRTエラーを引き起こします。

于 2013-03-04T22:41:29.847 に答える
3

bookはのNSMutableArrayAddressCardsですが、NSString()を使用してオブジェクトを反復処理しようとしていますname

オブジェクトを使用して反復しaddressCards、対応するプロパティを使用して比較を行う必要がありnameます。以下のコードのような検索方法を実装する必要があると思います。

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

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

    for (AddressCards *addressCard in book)
    {
        // do your comparison check here
        // assuming that you have a name property in AddressCards class

        if ([addressCard.name rangeOfString:someName].location != NSNotFound)
            [results addObject:addressCard.name];
    }
    return results;
}

お役に立てれば。

編集:この回答を使用して、必要に応じて比較コードを変更しました。

于 2013-03-04T22:46:45.057 に答える