在iOS中的循环中追加一个字符串

时间:2014-10-15 08:36:14

标签: ios loops string-concatenation nsmutablestring

我使用下面的代码在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;字符串打印正确日志。以下是日志的截图。

Edited server log

3 个答案:

答案 0 :(得分:1)

您的代码在几个方面存在缺陷,但手头问题的原因可能是服务器的响应不是ASCII。

您应该在条件为if (nil != output)的行中设置断点,并检查output是否为非零。

答案 1 :(得分:0)

我认为您忘记调用setup,因此strServerResponse不是初始化。

答案 2 :(得分:0)

最后,经过三天的随机努力,我得到了解决方案。我将 NSASCIIStringEncoding 更改为 NSUTF8StringEncoding ,这对我有用!我不知道如何改变这会影响结果。现在,我从服务器获得结果,并在每个循环中保留最后一个字符串。