我使用下面的代码在for循环中追加从服务器收到的字符串。我无法弄清楚出了什么问题。我在追加后收到一个空字符串。
FileName.h
@interface Communicator : NSObject <NSStreamDelegate>
{
...
NSMutableString *strServerResponse;
}
...
@property (nonatomic,strong) NSMutableString *strServerResponse;
@end
FileName.m
@implementation Communicator
@synthesize strServerResponse;
...
-(void) setUp {
strServerResponse = [NSMutableString string];
...
}
- (void)stream:(NSStream *)stream handleEvent:(NSStreamEvent)event {
uint8_t buffer[1024];
int len;
while ([inputStream hasBytesAvailable]) {
len = [inputStream read:buffer maxLength:sizeof(buffer)];
if (len > 0) {
NSString *output = [[NSString alloc] initWithBytes:buffer length:len encoding:NSASCIIStringEncoding];
if (nil != output) {
NSlog(@"output : ",output);
[strServerResponse appendString:output];
}
}
}
NSLog(@"strServerResponse : %@", strServerResponse);
}
..
strServerResponse的日志始终为空。我哪里出错了? &#39;设置&#39;此文件中的方法是从其他文件调用的。我用过调试,看到流程是正确的。这里&#39;输出&#39;字符串打印正确日志。以下是日志的截图。
答案 0 :(得分:1)
您的代码在几个方面存在缺陷,但手头问题的原因可能是服务器的响应不是ASCII。
您应该在条件为if (nil != output)
的行中设置断点,并检查output
是否为非零。
答案 1 :(得分:0)
我认为您忘记调用setup,因此strServerResponse不是初始化。
答案 2 :(得分:0)
最后,经过三天的随机努力,我得到了解决方案。我将 NSASCIIStringEncoding 更改为 NSUTF8StringEncoding ,这对我有用!我不知道如何改变这会影响结果。现在,我从服务器获得结果,并在每个循环中保留最后一个字符串。