显示NSMutableString中的特定数据

时间:2013-10-21 17:36:33

标签: ios objective-c xcode uitableview

我有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,我想要显示,我的行中只有标题如何才能在我的标题标签中找到我的标题而不是整个Testdata?请你帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:2)

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

[array objectAtIndex:indexPath.row]

这是服务器返回的对象之一,它似乎是一个对象 服务器API返回的特殊类。

我不知道你是什么服务器API 使用,以及get_test:方法返回的对象类型,但通常在那里 是访问器方法,用于获取从服务器检索的对象的属性。

首先将对象转换为字符串(使用stringWithFormat:),然后再转换为字符串 尝试从字符串中提取单个属性非常麻烦且容易出错。 如果可能,您应该使用正确的访问器方法。

编辑:您现在告诉您使用Thrift API。我没有经验 使用那个API,但从快速查看文档似乎是服务器 call返回模型类Testadata的对象数组。因此,应该有类似的东西:

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

另一个评论:cellForRowAtIndexPath中获取对象的效率非常低, 因为该方法经常被调用。最好只获取一次对象 (例如在viewDidLoad)。

答案 1 :(得分: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:"value"

PS - 这假设'title'字符串本身不会包含逗号(,)和冒号(:)字符。