2013-04-01 2 views
0

Итак, я закодировал кучу объектов для записи, но у меня возникли проблемы с управлением файлами. Я не могу открыть существующий файл или создать новый файл.не может создать файл для записи - iOS

Я попытался создать пустой файл с тем же именем или просто создать новый файл. Кажется, он не реагирует (или вообще ничего не делает).

Редактировать Так что я следил за некоторыми советами здесь, и теперь у меня плохой доступ.

Вот где я получаю путь:

NSString *documentsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 
    filePath = [documentsDirectory stringByAppendingPathComponent:@"/bucketListData.dat"]; 

И вот модифицированный метод.

+0

Используйте тег [tag: object-c] для вопросов, касающихся самого языка. Благодаря! – Undo

+0

отредактирован с оригинала, чтобы выразить изменения –

ответ

4

У вас нет разрешения на запись в корень, вы можете получить доступ только вашу песочницу, и вы создаете только для чтения ручки. Попробуйте так:

NSString *docDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 
NSString *filePath = [docDir stringByAppendingPathComponent:@"bucketListData.dat"]; 
NSFileHandle *file = [NSFileHandle fileHandleForWritingAtPath:filePath]; 

if (!file) { 
    NSLog(@"Attempting to create the file"); 
    if (![[NSFileManager defaultManager] createFileAtPath:filePath 
               contents:nil 
               attributes:nil]) { 
     NSLog(@"Failed to create file"); 
    } 
    else { 
     file = [NSFileHandle fileHandleForWritingAtPath:filePath]; 
    } 
} 

NSLog(@"File handle: %@", file); 
+0

, который, похоже, не сделал трюк. Файл по-прежнему равен null после вызова createFileAtPath –

+0

@ScubaSteve Добавил больше кода, который работает для меня в новом проекте, повторите попытку. – Pascal

+0

ив отредактировал мой код выше рекомендованных линий .. он не работает –

1

Вы пытаетесь открыть файл в корне файловой системы, но у вас нет доступа к нему на iOS. Создайте файл в каталоге документов вместо:

NSData* encodedObject = [NSKeyedArchiver archivedDataWithRootObject: bucketItems]; 

NSArray* paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString* basePath = ([paths count] > 0) ? [paths objectAtIndex:0] : nil; 
NSString* path = [basePath stringByAppendingPathComponent:@"bucketListData.dat"]; 
NSFileHandle* file = [NSFileHandle fileHandleForReadingAtPath:path]; 
1

Вам необходимо записать файл в каталог документов. И затем используйте stringByAppendingPathComponent tu, чтобы создать полный путь. Это должно сработать, надеюсь, это поможет ...

-(void) writeFile 
{ 
    NSData *encodedObject; 
    encodedObject = [NSKeyedArchiver archivedDataWithRootObject: bucketItems]; 
    NSFileHandle *file; 

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory; 

    if(paths && [paths count]>0){ 
     documentsDirectory=[paths objectAtIndex:0]; 

     file = [NSFileHandle fileHandleForReadingAtPath:[documentsDirectory stringByAppendingPathComponent:@"/bucketListData.dat"]]; 

     if(file == nil) 
     { 
      NSLog(@"Failed to open a file handle for writing. Attempting to create a file."); 
      [[NSFileManager defaultManager] createFileAtPath:[documentsDirectory stringByAppendingPathComponent:@"/bucketListData.dat"] contents:nil attributes:nil]; 
      file = [NSFileHandle fileHandleForReadingAtPath:[documentsDirectory stringByAppendingPathComponent:@"/bucketListData.dat"]]; 
      if(file == nil) 
      { 
       NSLog(@"Unable to create new file."); 
      } 
     } 

     [file writeData: encodedObject]; 
     [file closeFile]; 
    } 
} 
Смежные вопросы