0

私はNSMutableStringこの情報を持っています:

T: Testadata(id:1,title:"Test",subtitle:"test is correct",note:"second test",identifiers:(

ここに私のテーブルの実装があります:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath
*)indexPath
{

 static NSString *CellIdentifier = @"TestCell";
TestCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell =[ [[NSBundle mainBundle] loadNibNamed:@"TestCell" owner:nil options:nil]
 lastObject];
}

 NSArray *array = [server get_test:10 offset:0 sort_by:0 search_for:@""];
 NSMutableString *t = [NSMutableString stringWithFormat:@"%@ ", [array  
objectAtIndex:indexPath.row]];


cell.testTitle.text = t;
NSLog(@" T :%@ ", t);

return cell;

}

今、私はすべての Testdata を私の t に持っています。表示したいのは、タイトル ラベルに Testdata 全体ではなく、タイトルだけを行に表示するにはどうすればよいですか?この実装で私を助けてくれませんか?

4

2 に答える 2

2

description文字列は、オブジェクトでメソッドを呼び出した結果です

[array objectAtIndex:indexPath.row]

これはサーバーから返されたオブジェクトの 1 つであり、サーバー API から返された特別なクラスのオブジェクトのようです。

どのサーバー API を使用しているのか、get_test:メソッドによって返されるオブジェクトの種類はわかりませんが、通常、サーバーから取得したオブジェクトのプロパティを取得するためのアクセサー メソッドがあります。

最初に ( を使用して) オブジェクトを文字列に変換してから、文字列stringWithFormat:から単一のプロパティを抽出しようとするのは面倒で、エラーが発生しやすくなります。可能であれば、代わりに適切なアクセサ メソッドを使用する必要があります。

編集: Thrift API を使用することを伝えました。私はその API の経験がありませんが、ドキュメントをざっと見てみると、サーバー呼び出しはモデル クラスのオブジェクトの配列を返すようですTestadata。したがって、これに似たことが可能になるはずです:

Testadata *td = [array objectAtIndex:indexPath.row];
cell.testTitle.text = td.title;
cell.testSubtitle.text = td.subtitle;

別の注意点:オブジェクトのフェッチは、cellForRowAtIndexPathそのメソッドが頻繁に呼び出されるため、非常に非効率的です。オブジェクトは 1 回だけフェッチすることをお勧めします (たとえば、 でviewDidLoad)。

于 2013-10-21T17:57:03.460 に答える
1

メソッドget_testは辞書の配列を返す必要があります。ただし、いくつかの理由で、テストデータが近づくにつれて文字列に固執し、これが方法の1つです-

NSString *titleSting = nil;

NSString *testdata = @"Testadata(id:1,title:\"Test\",subtitle:\"test is correct\",note:\"second test\",identifiers:(";
NSLog(@"T: %@", testdata);

NSArray *components = [testdata componentsSeparatedByString:@","];

for (NSString *aComponent in components) {
    if ([aComponent hasPrefix:@"title"]) {
        NSArray *subComponents = [aComponent componentsSeparatedByString:@":"];
        titleSting = [subComponents[1] stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"\""]];

        break;
    }
}

NSLog(@"titleSting = %@", titleSting);

上記のコードのロジック:- 元の長い文字列をカンマ (,) で囲まれた文字列の配列に分割します。そして、元の文字列のコンマ (,) の直後に配置されると仮定して、'title' (キー) を検索します。すべてのキーと値のペアは、このパターンに従いますkey:"value"

PS - これは、'title' 文字列自体にコンマ (,) とコロン (:) 文字が含まれていないことを前提としています。

于 2013-10-21T17:53:02.023 に答える