stringWithUTF8String失败,但有时只会失败

时间:2010-08-01 21:42:23

标签: objective-c cocoa-touch

我有以下代码:

NSData *data = [NSData dataWithContentsOfFile:filePath options:0 error:&fileError];
NSString *recipe = @"";
if (fileError == nil) {
     recipe = [NSString stringWithUTF8String:[data bytes]];
     NSLog(@"Converted Recipe as: %@",recipe);
     NSLog(@"Original Data was: %@",data);  
} else {
     NSLog(@"Error reading file: %@", [fileError localizedDescription]);
}

问题是有时stringWithUTF8String返回null,有时它会正确返回文件的内容...... SAME文件。有时它会起作用,有时则不起作用。这是一个来自日志的片段,当它没有....这对我意味着文件读取工作,但由于某种原因,这次转换失败了。如果我再次这样做(这被称为tableView didSelectRowAtIndexPath的结果:所以我可以点击另一行,然后回到这一行。

2010-08-01 16:14:29.031 RecipeBrowse[52056:207] Converted Recipe as: (null)
2010-08-01 16:14:29.037 RecipeBrowse[52056:207] Original Data was: <426c6163 6b656e65 64204361 626f2046 69736820 5461636f 730a0a49 4e475245 4449454e 54533a0a 0a2d200a 0a0a4d45 54484f44 3a0a0a42 4c41434b 454e4544 20434142 4f204649 53482054 41434f53 

任何想法如何使这更可靠?

2 个答案:

答案 0 :(得分:32)

+stringWithUTF8String:将假设其输入是以NUL结尾的字符串,但NSData不会在其中放置任何特定的终结符。而是使用-initWithBytes:length:encoding:创建字符串,因为您知道数据的长度。

答案 1 :(得分:5)

有同样的问题,initWithData:数据对我有用

- (NSString *)base64String {
    NSData * data = [UIImagePNGRepresentation(self) base64EncodedDataWithOptions:NSDataBase64Encoding64CharacterLineLength];
    return [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
}
相关问题