NSString-initWithContentOfFile错误-Objective-C
我正在尝试将名为NSString-initWithContentOfFile错误-Objective-C,objective-c,nsstring,Objective C,Nsstring,我正在尝试将名为names.txt的文件内容加载到项目目录中的NSString。为此,我有以下代码: NSError *error = nil; NSString *names = [[NSString alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"names" ofType:@"txt"] encoding:NSASCIIStringEncoding error:&error
names.txt的文件内容加载到项目目录中的NSString
。为此,我有以下代码:
NSError *error = nil;
NSString *names = [[NSString alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"names" ofType:@"txt"] encoding:NSASCIIStringEncoding error:&error];
if (error != nil) {
[NSException raise:@"Error reading file :" format:@"%@",error];
}
我收到***由于未捕获的异常“读取文件时出错:”,正在终止应用程序,原因是:“Error Domain=nscocaerordomain code=258”文件名无效。“
。我找不到其他类似的病例。此代码有什么问题?确保您的names.txt文件包含在目标的Xcode Build Phase窗口的Copy Bundle Resources区域下
在调试器中,您可以使用以下命令测试有效的捆绑包文件:
...
NSString *file = [[NSBundle mainBundle] pathForResource:@"names" ofType:@"txt"];
/* FILE ought not be nil. NSAssert (file) */
NSString *names = [[NSString alloc] initWithContentsOfFile: file
encoding: NSASCIIStringEncoding
error: &error];
不,不,那不是正确的测试。测试是
if (nil == names) {
error
的值不会告诉您我们是否成功。返回的nil值告诉您是否存在问题。然后,也只有在那时,您才能读取错误。pathForResource:ofType:
找不到文件,正在返回nil
。您确定扩展名是txt
?您是否右键单击了Finder
中的文件,单击了“获取信息”并检查了“名称和扩展名”下的扩展名?我确定,该文件的名称是names
,扩展名是txt
是在mac还是在ios上?您已经尝试过pathForResource:ofType:inDirectory:
了吗?我正在Mac上工作,没有,还没有尝试过。当我记录文件时,我得到(null)
,该文件位于Xcode项目的主文件夹下……这意味着该文件不是应用程序包的一部分。该文件需要列在“复制捆绑资源”下;在那里检查。如果您将names.txt放入“Supporting Files”组,则它可能会自动添加到“Copy Bundle Resources”中。好的,现在请确保它列在“Copy Bundle Resources”下。(选择“项目”;然后选择“目标”;然后选择“构建阶段”;然后打开“复制捆绑资源”并检查names.txt。)没有“复制捆绑资源”之类的东西,有“复制文件”,在那里添加了文件,没有任何更改。然后确保已复制。在目的地附近玩一玩(先试试“资源”,如果“资源”不起作用,就试试其他资源)。我知道。但是我不能容忍你做错了,这会给你带来严重的麻烦。所以,为了理解这一点,有没有可能错误不是零并且字符串已经成功生成?这是可能的。除非字符串为nil,否则无法保证错误的值!
if (nil == names) {