我有一个小型实用程序应用程序,它解析一个 csv 文件并使用数据来填充一个核心数据存储,以便与另一个应用程序一起使用。我使用 -initWithContentsOfFile:encoding:error: 打开 csv 文件,该方法总是返回 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\"";
}

现在,我正在查看那个确切目录中的那个确切文件。更令人困惑的是,我为另一个有效的应用程序提供了本质上相同的实用程序的另一个版本——唯一的区别是核心数据存储和实体的构成以及 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];
}

最佳答案

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

关于objective-c - stringWithContentsOfFile :encoding:error: error 260,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6228876/

10-14 22:34
查看更多