2011-11-09 29 views
1

我已经从XCODE 4升级到4.2,现在我有问题。无法在XCODE 4.2中读取文件,在4.0中工作?

下面的代码工作前4.2读取文件中的 “文件路径”:

// Fill myString with questions from the .txt file and then read .txt file 
NSString *filePath = whatFile; 
NSString *myString = [[NSString alloc] initWithContentsOfFile:filePath]; 

// Load array 
NSArray* myArray = [myString componentsSeparatedByString:@"\r"]; 
NSLog (@"\n \n Number of elements in myArray = %i", [myArray count]); 

随着4.2 “initWithContentsOfFile” 在下面的代码行被弃用:

NSString *myString = [[NSString alloc] initWithContentsOfFile:filePath]; 

...并应根据手册更换为以下内容:

NSString *myString = [NSString stringWithContentsOfFile:filePath encoding: NSUTF8StringEncoding error:&err]; 

我不能通过替换代码行来获取它以读取同一文件中的记录。顺便说一句,我已经定义了&犯错。

当我NSLog myString我得到(null)。

我有点绝望解决这个问题,非常感谢任何帮助。

干杯

+0

又是什么错误对象告诉你吗? – Abizern

回答

1

NSLog如果有错误的err变量。另外NSLogfilePath

也许编码不是UTF-8,你确定编码吗?

最好的非UTF-8编码赌注是NSMacOSRomanStringEncoding,它支持8位字符。

1

尝试:

NSError* error = nil; 
    NSStringEncoding encoding; 
    NSString *fileContent = [NSString stringWithContentsOfFile:filePath usedEncoding:&encoding error:&error]; 

如果不工作,尝试在你的代码:NSASCIIStringEncoding

0

文件可能不包含UTF8编码的字符串。请参阅apple的文档,它有一个读取不知道编码的文件的例子:Reading data with an unknown encoding

您需要使用[string|init]WithContentsOfFile:usedEncoding:error方法,如果失败了,还有几件事情可以在最后呈现错误消息给用户(例如,尝试读取它作为NSAttributedString)。

例如,你可以这样做:

// Fill myString with questions from the .txt file and then read .txt file 
NSString *filePath = whatFile; 
NSStringEncoding encoding; 
NSError *error; 
NSString *myString = [[NSString alloc] initWithContentsOfFile:filePath usedEncoding:&encoding error:&error]; 

if (!myString) { 
    myString = [[NSString alloc] encoding:NSUTF8StringEncoding error:&error] 
} 

if (!myString) { 
    myString = [[NSString alloc] encoding:NSISOLatin1StringEncoding error:&error] 
} 

if (!myString) { 
    NSLog(@"error: %@", error); 
    return; 
} 


// Load array 
NSArray* myArray = [myString componentsSeparatedByString:@"\r"]; 
NSLog (@"\n \n Number of elements in myArray = %i", [myArray count]);