2014-09-30 1 views
1

У меня есть проблема, которую я не могу сохранить в iOS 8, пока она отлично работает в iOS 7. Пожалуйста, где моя проблема?Не могу написатьToFile toFullPath в iOS 8 issue

.h  
    NSMutableArray *selected; 


.m 
    - (void)saveSelected 
    { 
     if (![selected writeToFile:[SettingVO toFullPath:@"selected"] atomically:YES]) 
     { 
      NSLog(@"Could not save selected!!! %@", selectedParitems); 
     } 
    } 

Update: У меня есть включают toFullPath метод и я отлажена его. Я обнаружил, что с iOS 7 он не пропускает бросок, если fileMgr и работает нормально, а с iOS 8 он возвращает нуль. Надеюсь, это поможет.

+ (NSString *)toFullPath:(NSString *)path 
{ 
    NSString *bundlePath = [[NSBundle mainBundle] bundlePath]; 
    NSURL *url = [NSURL fileURLWithPath:bundlePath]; 
    NSMutableArray *components = [NSMutableArray arrayWithArray:[url pathComponents]]; 
    [components removeLastObject]; 
    [components addObject:@"Documents"]; 
    [components addObject:@"data"]; 

    NSString *fullPath = [NSString pathWithComponents:components]; 

    NSFileManager *fileMgr = [NSFileManager defaultManager]; 
    if (![fileMgr fileExistsAtPath:fullPath isDirectory:NULL]) 
    { 
     if ([fileMgr createDirectoryAtPath:fullPath withIntermediateDirectories:NO attributes:nil error:nil]) 
     { 
      //--N-SLog(@"+ Items directory created."); 
     } 
     else 
     { 
      //--N-SLog(@"- Couldn't create Items directory!!!"); 
      return nil; 
     } 
    } 

    return [fullPath stringByAppendingPathComponent:path]; 
} 
+0

Что возвращается '[SettingVO toFullPath: @" selected "]'? –

+0

В iOS 8 он возвращает 'NULL', но в iOS 7 он возвращает«/Users/CANCAN/Library/Developer/CoreSimulator/Devices/BD971C52-6E84-4DDA-A90F-588476CFA2D1/data/Applications/D5E87B2C-C027-4F53-88B1 -6FFF989CD5D8/Documents/data/selected ", который имеет путь @PhillipMills – CAN

+0

Возможно, вы используете отладчик внутри' toFullPath: ', чтобы узнать, почему он возвращает NULL. –

ответ

1

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

Использование ...

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *path = [paths firstObject]; 
if (path) { 
    // ... 
} 

... чтобы получить путь базового документа.

+0

Он отлично поработал. – CAN