2015-11-16 3 views
0

Я пытаюсь сохранить некоторые значения в plist в каталоге поддержки приложения моего приложения iOS. Но запись всегда терпит неудачу. Я использовал код плиты котла из документации iOS.не удается записать файл в каталоге AplicationSupport

В приведенном ниже коде я всегда сталкивался с ошибкой при записи writeToURL: атомарно. I.E Я всегда получаю сообщение «Не удалось записать в plist» в журнале, и файл никогда не создается.

URL-адрес создается правильно. Это то, что я вижу в распечатке URL ниже. URL для хранения plist - файл: ///var/mobile/Containers/Data/Application/9E26C447-7562-438E-A38A-E8F04C6DAFFE/Library/Application%20Support/com.apm.smartiothome.chatime/bcastSeqNum.plist

Буду признателен за любые указатели на то, что я делаю неправильно.

NSFileManager* sharedFM = [NSFileManager defaultManager]; 
NSArray* possibleURLs = [sharedFM URLsForDirectory:NSApplicationSupportDirectory 
             inDomains:NSUserDomainMask]; 
NSURL* appSupportDir = nil; 
NSURL* appDirectory = nil; 

if ([possibleURLs count] >= 1) { 
    // Use the first directory (if multiple are returned) 
    appSupportDir = [possibleURLs objectAtIndex:0]; 
} 

// If a valid app support directory exists, add the 
// app's bundle ID to it to specify the final directory. 
if (appSupportDir) 
{ 
    NSString* appBundleID = [[NSBundle mainBundle] bundleIdentifier]; 
    appDirectory = [appSupportDir URLByAppendingPathComponent:appBundleID]; 
} 
else 
{ 
    DDLogError(@"Could not get pointer to app support directory") ; 
} 

self.bcastSeqNumFilePtr = [appSupportRootPtr URLByAppendingPathComponent:@"bcastSeqNum.plist" isDirectory:NO]; 

NSMutableArray *arrToReturn ; 

arrToReturn = [NSMutableArray arrayWithContentsOfURL:self.bcastSeqNumFilePtr] ; 

if(!arrToReturn) 
{ 
    /*File does not exist...create one*/ 
    DDLogVerbose(@"Bcast seq num file does not exist. Creating bcast plist file") ; 
    NSMutableDictionary *dictToStore = [[NSMutableDictionary alloc] init] ; 
    NSMutableArray *arrToReturn = [[NSMutableArray alloc] init] ; 
    [arrToReturn addObject:[NSNumber numberWithInt:-1]] ; 
    [dictToStore setObject:arrToReturn forKey:@"Bcast Seq Numbers"] ; 
    if(![dictToStore writeToURL:self.bcastSeqNumFilePtr atomically:YES]) 
    { 
     DDLogError(@"Failed to write to plist.") ; 
    } 
} 
else 
{ 
    DDLogVerbose(@"Bcase seq num file exists. returning seq number list from it %@",arrToReturn) ; 
} 
+0

Выполняете ли вы это на тренажере или на реальном устройстве? –

ответ

0

Проблема заключается в том, что writeToURL не будет создавать недостающие каталоги в пути для вас. Если вы позвоните:

NSError *error; 
[sharedFM createDirectoryAtURL:appDirectory withIntermediateDirectories:NO attributes:nil error:&error]; 

это создаст каталог.

Один вопрос, почему вы добавляете идентификатор bundleIdentifier в путь? Каталог поддержки приложений, который вы получаете, уже является приватным для песочницы вашего приложения. Если вы не добавляете это, вам не нужно создавать каталог.

Смежные вопросы