2009-08-18 53 views
0

我正在将数据(从网页)转换为字符串)。基本代码的作品(但有一些微妙的变化 - 可能在服务器上)。“无效”iphone字符串

NSLog显示预期的字符串(可能是1000个字符长)。但是,当我浮动在responseString上时,它显示“无效”。更糟糕的是,使用componentsSeparatedByCharactersInSet解析不起作用。

想法?

NSString *responseString; 
responseString = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding]; 
NSLog([NSString stringWithFormat:@"responsestring ='%@'",responseString]); 
if ([responseString compare:@""] != NSOrderedSame) { 
    lines = [responseString componentsSeparatedByCharactersInSet: [NSCharacterSet characterSetWithCharactersInString:@";"]]; 
+0

只需注意您可以使用equalsTo:而不是compare:来比较字符串。那么你不必将它等同于NSOrderedSame。 – rein 2009-08-18 14:31:53

+0

缰 - 谢谢你的提示。与isEqual一起。 – BankStrong 2009-08-18 15:57:24

+0

另外,你的NSLog不需要有stringWithFormat的东西。事实上,那会很糟糕。 NSLog(@“responseString ='%@'”,responseString)会做你想做的事情,因为它自动具有格式。 (之所以不好,是因为responseString,如果它有%,可能会导致你崩溃,因为你可能会传入@“responseString ='一些随机值,其中有'%'” – AlBlue 2009-08-18 20:40:31

回答

2

这可能发生在配置设置为“发布”而不是“调试”,我认为。

0

不要相信调试说什么,这是不准确的,这发生在我身上和我花了一段时间才能认识到Xcode调试并不总是正确的,不应该被信任,所以我不再信任调试器,并且当它试图告诉我什么是无效时,我使用nslog语句。所以不要担心它发生了,当它发生在我身上时,我也在解析某些webservice的响应。

+0

死了。我回去后意识到我将版本设置为“释放”,如果调试器无法计算出值,应该提供不同的值,例如“未知 - 使用发布版本”。 – BankStrong 2009-08-18 13:34:19

0

只是要清楚 - 我在调试器中看到“无效”的经验意味着引用是一个已经发布的对象。

你的问题和下面的评论似乎表明你认为“无效”是一个实际的字符串值 - 但你确定你不只是有一个内存管理?