我正在尝试将数据保存在iPhone 5.1模拟器上的文档文件夹中。
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *filePath = [NSString stringWithFormat:@"%@/%@", documentsDirectory, @"myData.json"];
if ([[NSFileManager defaultManager] isWritableFileAtPath:filePath]) {
NSLog(@"Writable");
}else {
NSLog(@"Not Writable");
}
我总是“不可写”。 任何的想法?请帮帮我。
答案 0 :(得分:19)
可能因为您尚未创建文件,您测试的文件不存在。 :)
你可以这样做来发现问题,
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *filePath = [NSString stringWithFormat:@"%@/%@", documentsDirectory, @"myData.json"];
NSLog(@"filePath %@", filePath);
if (![[NSFileManager defaultManager] fileExistsAtPath:filePath]) { // if file is not exist, create it.
NSString *helloStr = @"hello world";
NSError *error;
[helloStr writeToFile:filePath atomically:YES encoding:NSUTF8StringEncoding error:&error];
}
if ([[NSFileManager defaultManager] isWritableFileAtPath:filePath]) {
NSLog(@"Writable");
}else {
NSLog(@"Not Writable");
}
答案 1 :(得分:5)
试试这个:
NSString *data = .... // your json representation
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *appFile = [documentsDirectory stringByAppendingPathComponent:@"myData.json"];
[data writeToFile:appFile atomically:YES encoding:NSUTF8StringEncoding error:nil];
答案 2 :(得分:3)
将[{1}}换成[NSString stringWithFormat:]
。这会影响你创造可行路径的能力,或者说我的经验教会了我。
此外,在模拟器和真实设备上书写时会出现这种情况。当你在错误的路径中保存东西时,模拟器会比设备更宽容,而且通常你会让I / O正常工作,只会遇到臭名昭着的“它在模拟器中工作!”坑。 [NSString stringByAppendingPathComponent:]
只是一种落入的方式。
答案 3 :(得分:1)
获取文档目录路径
code <- function(x,y)
{
y[x<=8]<-3
y[x>=9 & x<=11]<-1
y[x>= 12 &x<=20]<-0
y[x>=21 &x<=24]<-2
y[x>=25]<-3}
将数据写入文件末尾
+(NSURL *)getDocumentsDirectoryPath
{
return [[[NSFileManager defaultManager]URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask]lastObject];
}