1

我正在遍历针对核心数据存储的获取请求的结果。对于结果列表中的每个对象,我正在读取几个字符串类型的属性并将它们连接成一个字符串(作为 CSV 格式文件输出)。

我的数据集中一条特定记录的一个特定字符串给我带来了麻烦:无关字符(汉字、阿拉伯文等)附加到字符串的末尾,它没有正确附加到我的结果字符串,我的 CSV 文件格式是软管。

这是我用于循环获取结果并附加字符串的代码:

NSMutableString *reportString = [[NSMutableString stringWithFormat:@"...\n"];
for (int s = 0; s < [frc.sections count]; s++) {
    for (int r = 0; r < [[frc.sections objectAtIndex:s] numberOfObjects]; r++) {
        NSIndexPath *i = [NSIndexPath indexPathForRow:r inSection:s];
        Thread *thread = [frc objectAtIndexPath:i];
        NSMutableString *activity = [NSMutableString stringWithString:[thread activity]];
        .
        .
        .
        [reportString appendString:activity];
        [reportString appendFormat:@",%@\n", client];
    }
}

我在这里使用stringWithString,但我也使用了其他几个字符串方法,结果相似,损坏。有一次,出现了阿拉伯字母。还有一次,它是"...random...FSO_CARRIER_ATT@2X.png"。我也尝试过使用单独的获取结果数组(而不是获取结果控制器)。

一件奇怪的事情是,当我从 lldb执行PO时,字符串会正确显示。这可以解释为什么这种“腐败”没有出现在我的表格视图中,就在我试图将字符串混合在一起时。

我的问题

我是否从核心数据模型中错误地复制了字符串值并导致这种情况发生?有没有我错过的技术?

更新:

监视变量与值的 NSLog 的屏幕截图:

截图 2

4

2 回答 2

1

正如我在评论中提到的,事实证明这是一个字符串编码/解码问题。

我提出了一个更有针对性的问题(如何在我的 NSString 中正确编码 Unicode 字符?)并很快得到了答案。

基本上,我使用了正确的字符串操作方法,这里的每个人都同意。最后,我用来将 CSV 文件附加到电子邮件的编码参数不正确。同时,Xcode 中变量窗格和 lldb 窗格之间的差异似乎是一个合法的错误。我将为此提交一份错误报告。

于 2013-04-18T09:36:38.627 回答
-1

我会将整个迭代代码放入一个串行后台线程中。输入顺序的损坏肯定与线程相互竞争有关。您仍然可以使用单独的线程,但您必须确保它们是串行执行的,即一个线程等待先前调度的线程完成。

在 Grand Central Dispatch 中,这将是一个类似的线程

dispatch_queue_t serialThread = 
   dispatch_queue_create("serialThread", DISPATCH_QUEUE_SERIAL); 

您还可以将托管对象上下文与

[context performBlockAndWait:...];
于 2013-04-04T13:53:55.827 回答