我正在创建一个写入 CSV 文件的 iPhone 应用程序。看起来最简单的方法是从数组添加到 NSMutableString
。我拥有的代码应该可以正常工作,但我会不断收到 Cocoa 错误 513
代码是:
NSArray *firstArray=[NSArray arrayWithObjects:@"A",@"b",nil];
NSMutableString *csv = [NSMutableString stringWithString:@"Strings"];
NSUInteger count = [firstArray count];
for (NSUInteger i=0; i<count; i++ ) {
[csv appendFormat:@"\n %@",
[firstArray objectAtIndex:i]
];
}
NSString *yourFileName = @"leads.csv";
NSError *error;
BOOL res = [csv writeToFile:yourFileName atomically:YES encoding:NSUTF8StringEncoding error:&error];
if (!res) {
NSLog(@"Error %@ while writing to file %@", [error localizedDescription], yourFileName );
}
非常感谢!
最佳答案
这很可能是因为您正在写入您没有写入权限的文件位置。
Cocoa 错误 513 转换为错误 NSFileWriteNoPermissionError。
通常,当有人试图写入应用程序包中的文件时,就会发生这种情况。您不能修改已编译应用程序的捆绑文件夹的内容。这是因为 bundle 是经过签名、编译的应用程序。
当您最终通过 iTunes App Store 分发该应用程序时,该应用程序将具有一个数字签名来验证该应用程序的内容。此签名在编译时生成,一旦签名,Apple 不希望任何人篡改内容。
确保您正在写入适当的位置,例如 Documents
、Temp
和 Cache
,使用如下内容:
NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0]; // Get documents folder
NSString *dataPath = [documentsDirectory stringByAppendingPathComponent:@"subFolder"];
NSString *filePath = [dataPath stringByAppendingPathComponent:@"fileName.csv"];
if (![[NSFileManager defaultManager] fileExistsAtPath:dataPath])
{
[[NSFileManager defaultManager] createDirectoryAtPath:dataPath withIntermediateDirectories:NO attributes:nil error:&error]; //Create folder
}
BOOL res = [csv writeToFile:filePath atomically:YES encoding:NSUTF8StringEncoding error:&error];
if (!res) {
NSLog(@"Error %@ while writing to file %@", [error localizedDescription], yourFileName );
}
这些文件夹只能由您的应用程序访问。没有其他应用程序可以访问这些文件夹的内容。 (同样,您的应用无法访问其他应用的文件夹。)
关于ios - 从应用程序写入 csv,Cocoa 错误 513,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31146664/