stringWithContentsOfFile:encoding:error:错误260

roy*_*yen 4 cocoa objective-c nsstring

我有一个小的实用程序应用程序,它解析csv文件并使用这些数据来填充Core Data存储以供另一个应用程序使用.我打开csv文件使用-initWithContentsOfFile:encoding:error:,该方法总是返回错误的nil

Error Domain=NSCocoaErrorDomain Code=260 UserInfo=0x100106450 "The file “data.csv” couldn’t be 
opened because there is no such file." Underlying Error=(Error Domain=NSPOSIXErrorDomain Code=2 "The 
operation couldn’t be completed. No such file or directory"), {
NSFilePath = "/Users/****/Library/Developer/Xcode/DerivedData/CreateData-
bhkmspyczgcfcrgehcbaydwdbfoa/Build/Products/Debug/data.csv";
NSUnderlyingError = "Error Domain=NSPOSIXErrorDomain Code=2 \"The operation couldn\U2019t be 
completed. No such file or directory\"";
}
Run Code Online (Sandbox Code Playgroud)

现在,我正在查看该确切目录中的确切文件.更令人困惑的是,我为另一个有效的应用程序提供了另一个基本相同的实用程序版本 - 唯一的区别是核心数据存储和实体的构成以及csv文件中的列数,所有这些都是加载csv文件后调用.或者没有加载,因为它...

int main (int argc, const char * argv[]) {

    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

    NSError *error = nil;
    NSString *csvFile = [[NSString alloc] initWithContentsOfFile:csvFilePath(QUESTIONS_INPUT_FILENAME) encoding:NSASCIIStringEncoding error:&error]; // This fails

    if (error != nil) {
        NSLog(@"Returned error:\n%@, %@", error, [error userInfo]); // Returns the above error message
        exit(1);
    }

// ...
}

NSString *csvFilePath(NSString *inputFileName) {
    NSString *resourcePath = [[NSBundle mainBundle] resourcePath];
    return [resourcePath stringByAppendingPathComponent:inputFileName];
}

NSString *applicationDocumentsDirectory() {
    return [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
}
Run Code Online (Sandbox Code Playgroud)

Abi*_*ern 8

它失败是因为你没有传入文件的实际位置,只是文件名,所以它试图在程序自己的文件夹中查找它 - 你正在使用包的路径.除非那是你的csv文件所在,否则它将找不到它.