2012-02-22 155 views
0

我不明白为什么self.tmp的输出为空。无法追加字符串

这里是我的代码使用

[self.dict enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) 
{ 
    NSMutableString *t = [NSString stringWithFormat:@"%@ - %@", key, obj]; 
    [self.tmp appendString:t]; 
}]; 

NSLog(@"%@", self.tmp) --> print null; 

tmp被声明为NSMutableString

我可以确认dict ivar包含数据。

+0

'self.temp'在哪里以及如何初始化? – sch 2012-02-22 15:28:01

+0

'self.tmp'的初始值是什么? – dasblinkenlight 2012-02-22 15:28:22

回答

3

因为self.tmp本身就是nil。你宣布它,但你曾经设置它或最初分配?只有当你追加的东西是现有的字符串时,追加才会有效。

在Objective-C中,如果您尝试附加到nil对象,则不会看到错误,您只会看到您看到的结果,这是没有任何事情发生。

就在你这里张贴代码,您可能要做到这一点:

self.tmp = [NSMutableString string]; 
+0

在上面描述的方案中,基于字典数据构建单个字符串的最佳方法是什么? – foho 2012-02-22 15:30:34

+0

啊,明白了。谢谢 ! – foho 2012-02-22 15:32:17

0

你能否证实self.tmp != nil,然后再开始?

+0

不是它是零。 – foho 2012-02-22 15:32:42

+0

@foho:正如其他人更详细地公布ithan,这是你的问题的原因。 – JeremyP 2012-02-22 15:37:29

0

self.tmp未创建。 务必:

self.tmp = [NSMutableString new];

1

你需要让你的伊娃TMP初始化和分配,请务必将其初始化为@"",这就是为什么你可以有问题的唯一问题。你并不需要显式地分配它,你可以使用自动释放的对象调用了一些类的方法:

self.temp=[NSMutableString stringWithString:@""]; 

如果字符串被设置为无,您要添加的东西到零,由于零能处理这种行为,你会得到这个意想不到的结果。