2013-05-13 4 views
0

Я создаю приложение, которое позволяет вам играть в настольные игры. Я храню свои журналы в plist, и я пытаюсь понять, как добавить plist. Я думаю, что я понимаю логику, но мне сложно помещать ее в код.Добавление некоторых данных в plist

Мой PLIST выглядит так:

plist

Сейчас я пытаюсь что-то вроде этого, но я считаю, что это будет просто перезаписывать файл Plist вместо добавления

//get path for root directory 
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES); 

NSLog(@"paths: %@",paths); 

//get path for documents directory 
NSString *documentsPath = [paths objectAtIndex:0]; 
NSLog(@"documentsPath: %@",documentsPath); 

//get the path for logs.plist file 
NSString *plistPath = [documentsPath stringByAppendingPathComponent:@"logs.plist"]; 


//create dictionary with values 
NSDictionary *plistDict = [NSDictionary dictionaryWithObjects:[NSArray arrayWithObjects:myLogTitle, name, players, myNotes, nil] forKeys:[NSArray arrayWithObjects:@"Log Title",@"Name",@"Players","Notes", nil]]; 

//write out data 
[plistDict writeToFile:plistPath atomically:YES]; 

Любая помощь было бы действительно оценено.

+0

http://stackoverflow.com/questions/4779877/how-to-write-in -append-mode-for-text-file – Balu

+0

Чтобы разрешить изменение в объекте, вы должны хранить свои данные в изменяемом объекте, например 'NSMutableArray',' NSMutableDictionary' и т. д. вместо 'NSArray' или' NSDictionary'. я надеюсь, что его достаточно ясно –

ответ

0

Попробуйте Как это

NSString *path = [[NSBundle mainBundle] pathForResource: @"data" ofType: @"plist"]; 
NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile: path]; 
NSLog(@"dictbeforeAppending..%@",dict); 

//getting Previous Array..... 
NSMutableArray *prevArray = [[NSMutableArray alloc]init]; 
prevArray = [[dict valueForKey:@"Root"] valueForKey:@"Logs"]; 
NSLog(@"prevArray..%@",prevArray); 

// Add new stuff to old stuff..... 

NSMutableArray *players =[[NSMutableArray alloc]initWithObjects:@"NewPlayer1",@"Newplayer2",@"Newplayer3", nil];//1 
NSDictionary *newObject = [NSDictionary dictionaryWithObjects:[NSArray arrayWithObjects:@"Logtiltle2", @"Krish", players, @"it will be more fun", nil] forKeys:[NSArray arrayWithObjects:@"Log Title",@"Name",@"Players",@"Notes", nil]];//2 

NSMutableArray *newArray = [[NSMutableArray alloc]init]; 
[newArray addObject:newObject]; 
for (int i=0;i<[prevArray count];i++){ 
    [newArray addObject:[prevArray objectAtIndex:i]]; 
} 

//set all values for Plist...... 
NSMutableDictionary *allItemsDict = [[NSMutableDictionary alloc]init]; 
NSMutableArray *Logs = [[NSMutableArray alloc]initWithArray:newArray]; 
[allItemsDict setObject:Logs forKey:@"Logs"]; 

NSMutableDictionary *Root = [[NSMutableDictionary alloc]init]; 
[Root setObject:allItemsDict forKey:@"Root"]; 

// Now, write to the plist: 
[Root writeToFile:path atomically:YES]; 

NSDictionary *dictafterAppending = [NSDictionary dictionaryWithContentsOfFile: path]; 
NSLog(@"dictafterAppending..%@",dictafterAppending); 

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

+0

Спасибо! Думаю, это я возглавлял в направлении написания. Поэтому, когда я читаю данные с моего plist, должен ли я получить к нему доступ из пакета или мне нужно получить доступ к этому временному словарю? Похоже, что позже, поскольку мое представление, которое читается в моих журналах к таблице, показывает только те данные, которые у меня уже были в plist, и никаких новых данных. –

+0

Я также получаю null для prevArray при первом запуске кода. Благодаря! –

+0

, если вы хотите в справочнике документов, а затем просто скопируйте его на него, используйте dictafterAppending при перезагрузке таблицы. – iSpark

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