0

テーブルビューをフィルタリングするための検索を追加したいと考えています。私はそれを行う方法を知っていますが、私のセルは完全にカスタムであるため、名前でフィルタリングし、名前にNSDictionary応じて他のすべてのデータを取得する方法がわかりません。

NSString *name = [searchResults objectAtIndex:indexPath.row];

これは、正しくフィルタリングされた後に の名前を返しますがcell.textLabel、私の辞書のように、すべての情報を取り戻す必要があります。

admin = ;
approved = ;
business = "";
category = ;
description = "";
distance = "";
email = "";
favs = ;
id = ;
image1 = "";
lat = "";
location = "";
lon = "";
name = "";
password = "";
rating = "";
telephone = "";
website = "";

理にかなっている場合、ビジネス名を取得するだけで上記のすべての情報を取得するにはどうすればよいですか?

4

1 に答える 1

3

より多くの情報が必要ですが、私があなたが正しく行っていることを解釈すると、オブジェクトから名前文字列を抽出し、UITableViewのデータソースとしてそれらの名前文字列を配列に入力しているように見えます。次に、名前から逆方向に作業して、元のオブジェクトを取得しようとしています。

その場合は、元のオブジェクトを配列に入力してデータストアをバックアップしないのはなぜですか。UITableViewの選択した行に基づいて、行ごとにオブジェクトを簡単に取得できます。セルの内容を設定した場所を更新するだけで、別の配列からではなく、オブジェクトから名前フィールドを取得できます。

例:

// Defined in your class interface:
    NSMutableArray *searchResults = [[NSMutableArray alloc] init];
    NSMutableArray *myArray; // contains all of your objects, could be a dictionary as well


- (void) searchTableView {

NSString *searchText = searchBar.text;
NSMutableArray *searchArray = [[NSMutableArray alloc] init];

[searchArray addObjectsFromArray:myArray];

for (myObject *anObject in searchArray) {
    NSString *objectName = [myObject name];
    NSRange resultsRange = [objectName rangeOfString:searchText options:NSCaseInsensitiveSearch];

    if (resultsRange.length > 0)
        [searchResults addObject:anObject];
}

searchArray = nil;
}
  1. ここでは、すべてのオブジェクトの配列myArrayから始めます(辞書に格納されている場合は、次の手順で配列に変換するだけです)。

  2. 新しい配列searchArrayには、メイン配列(図のように)またはディクショナリ(追加の変換)からのすべてのオブジェクトが入力されます。

  3. ループでは、searchArray内の各オブジェクトの名前フィールドがsearchBarからのテキストと比較されます。searchBarの内容が名前フィールド内に存在する場合、オブジェクトは結果配列searchResultsに追加されます。

  4. searchResultsをUITableViewのデータソースとして使用し、各セルのテキストをsearchResults内の対応するオブジェクトの名前に設定します。これで、UITableViewの各行がオブジェクトに直接関連します。

私はもともとこの方法を次のサイトで学んだことに注意してください。私は彼らのチュートリアルを通して作業することをお勧めします-それは速く、検索設定と組み合わせて使用​​する他のいくつかの素晴らしい機能を示しています。ARCの前に書かれていることに注意してください。したがって、releaseARCを使用していると仮定すると、ステートメントなどの一部を省略する必要があります。

于 2013-01-19T21:15:27.777 に答える