【问题标题】:Append a string inside loop in iOS在iOS中的循环内附加一个字符串
【发布时间】:2014-10-15 08:36:14
【问题描述】:

我正在使用下面的代码在 for 循环中附加从服务器接收到的字符串。我无法弄清楚出了什么问题。追加后我收到一个空字符串。

文件名.h

    @interface Communicator : NSObject <NSStreamDelegate> 
    {
      ...
     NSMutableString *strServerResponse;

    }

    ...
    @property (nonatomic,strong)  NSMutableString *strServerResponse;
    @end

文件名.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 的日志始终为空。我哪里错了?此文件中的“设置”方法是从其他文件调用的。我已经使用调试并看到流程是正确的。这里的“输出”字符串打印正确的日志。以下是日志截图。

【问题讨论】:

  • buffer 看起来像什么? len 是什么?
  • 你的问题比其他任何帖子都更紧迫?
  • for 循环在哪里?
  • @NikolaiRuhe : 我今天有截止日期
  • @Droppy : 缓冲区包含字节格式的响应,后来转换为 NSString。

标签: ios loops string-concatenation nsmutablestring


【解决方案1】:

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

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

【讨论】:

  • @JayprakashDubey 抱歉,我不明白。
【解决方案2】:

我想你忘记调用 setup 了,所以 strServerResponse 没有初始化。

【讨论】:

  • 在这种情况下,控制台不会显示空响应而是“strServerResponse : (null)
  • 让我检查一下..@JayprakashDubey
【解决方案3】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-07
    • 2019-07-05
    • 2017-07-10
    • 2021-08-15
    相关资源
    最近更新 更多