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;

}

现在我的 t 中有所有 Testdata ,我想显示,只是在我的行中显示标题 我怎么能在我的标题标签中只有我的标题而不是整个 Testdata ?你能帮我完成这个实现吗?

4

2 回答 2

2

字符串是在description对象上调用方法的结果

[array objectAtIndex:indexPath.row]

这是服务器返回的对象之一,并且似乎是服务器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效率非常低,因为该方法被频繁调用。最好只获取一次对象(例如在 中viewDidLoad)。

于 2013-10-21T17:57:03.460 回答
1

您的get_test方法应该返回一个字典数组。但是,由于某些原因,您坚持使用字符串作为测试数据方法,那么这是其中一种方式 -

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),假设它将在原始字符串中的逗号(,)之后立即放置。所有键值对都遵循这种模式key:"value"

PS - 这假设“标题”字符串本身不会有逗号 (,) 和冒号 (:) 字符。

于 2013-10-21T17:53:02.023 回答