2014-10-21 2 views
0

Я пытаюсь написать plist, содержащий массив словарей. Каждый словарь содержит строку, которая определяет атрибут этого словаря (комнаты). Я только хочу написать в одну строку, чтобы установить этот атрибут на что-то, основанное на результате инструкции if.Запись в plist, содержащий массив словарей

Пример PLIST:

Номера = (

 { 
     Availability = unavailable; 
     Floor = 1; 
     Name = "Ferret Room"; 
     Status = Busy; 
     Time = "4.00pm"; 
    }, 
      { 
     Availability = unavailable; 
     Floor = 1; 
     Name = "Squirrel Room "; 
     Status = Busy; 
     Time = "4.00pm"; 
    }, 

А вот пример моего кода:

 NSString* newPlistPath = nil; 
    NSFileManager* manager = [NSFileManager defaultManager]; 
    if ((newPlistPath = [[[NSBundle mainBundle] bundlePath] stringByAppendingPathComponent:@"Favourites/Favourites.plist"])) 
    { 
     if ([manager isWritableFileAtPath:plistPath]) 
     { 
      NSMutableDictionary* infoDict = [NSMutableDictionary dictionaryWithContentsOfFile:plistPath]; 
      NSLog(@"infoDict %@", infoDict); 
      NSLog(@"infoDict %@", [[infoDict objectForKey:@"Availability"] objectAtIndex:0]); 

      [infoDict setValue:@"available" forKey:@"Rooms.Availability"]; 
      [infoDict writeToFile:newPlistPath atomically:NO]; 
      [manager setAttributes:[NSDictionary dictionaryWithObject:[NSDate date] forKey:NSFileModificationDate] ofItemAtPath:[[NSBundle mainBundle] bundlePath] error:nil]; 
     } 
    } 

Любая помощь будет принята с благодарностью Есть похожие вопросы, но без решения того, что я пытаюсь сделать. Спасибо.

+1

Вы не можете написать приложение, оно доступно только для чтения. – rmaddy

ответ

0
// Make a path to the plist in the Documents directory (not the bundle directory, because you can't write to that directory) 
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString * newPlistPath = [[paths objectAtIndex:0] stringByAppendingPathComponent:@"Favourites.plist"]; 

NSFileManager* manager = [NSFileManager defaultManager]; 

if ((newPlistPath) 
{ 
    if ([manager isWritableFileAtPath:plistPath]) 
    { 
     NSMutableDictionary* infoDict = [NSMutableDictionary dictionaryWithContentsOfFile:plistPath]; 
     NSLog(@"infoDict %@", infoDict); 
     NSLog(@"infoDict %@", [[infoDict objectForKey:@"Availability"] objectAtIndex:0]); 

     [infoDict setValue:@"available" forKey:@"Rooms.Availability"]; 
     [infoDict writeToFile:newPlistPath atomically:NO]; 
     [manager setAttributes:[NSDictionary dictionaryWithObject:[NSDate date] forKey:NSFileModificationDate] ofItemAtPath:[[NSBundle mainBundle] bundlePath] error:nil]; 
    } 
} 
Смежные вопросы