2012-07-01 4 views
1

Можно создать дубликат:
How to populate UITableView with plistЗагрузка данных из списка свойств в Tableview

Я сохранить данные в Plist так:

- (IBAction)save:(id)sender 
{ 
    NSArray *paths = NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES); 

    NSString *documentsPath = [paths objectAtIndex:0]; 
    NSString *plistPath = [documentsPath stringByAppendingPathComponent:@"data.plist"]; 
    NSMutableArray *data = [NSMutableArray arrayWithContentsOfFile:plistPath]; 

    if (nil == data) { 
     data = [[NSMutableArray alloc] initWithCapacity:0]; 
    } 
    else { 
     [data retain]; 
    } 

    NSMutableDictionary *array = [[NSMutableDictionary alloc]init]; 
    [array setObject:label1.text forKey:@"Test1"]; 
    [array setObject:label2.text forKey:@"Test2"]; 
    [array setObject:label3.text forKey:@"Test3"]; 
    [array setObject:label4.text forKey:@"Test4"]; 

    NSLog(@"%@", array); 
    [data addObject:array]; 
    [array release]; 

    [data writeToFile:plistPath atomically: TRUE]; 
    [data release]; 
} 

NSLog:

2012-07-01 18:52:19.566 testapp[22651:707] { 
    Test1 = 40; 
    Test2 = 102; 
    Test3 = 153; 
    Test4 = 255; 
} 

Как загрузить сохраненные данные в uitableview?

ответ

1

Чтобы прочитать его, сделайте следующее:

NSMutableDictionary* plistDict = [[NSMutableDictionary alloc] initWithContentsOfFile:plistPath]; 

тогда Вы должны быть в состоянии прочитать значения для всех клавиш, как это:

NSString *myValue = [plistDict objectForKey:@"someKey"]; 

редактировать:

После перечитывая свой код, похоже, что вы делаете то, что вы не хотите делать. Ваша текущая структура plist представляет собой массив верхнего уровня, который добавляет словарь к себе каждый раз, когда вы вызываете «save». Это то, что вы пытаетесь сделать? Если да, то что представляет собой ячейку в вашей таблице, индекс в массиве?

Если да, то вы хотите сделать

// top level array 
NSMutableDictionary* plistArray = [[NSMutableDictionary alloc] initWithContentsOfFile:plistPath]; 

// individual dictionary at one array index (such as indexPath.row in cellForRowAtIndexPath) 
NSMutableDictionary *dictionary = [plistArray objectAtIndex:yourIndex]; 

В любом случае, объект, который вы назвали «массив» на самом деле является словарь, так что вы должны переименовать его (или изменить его, чтобы быть массивом, если это что ты хочешь).

+0

Моей целью является сохранение новых данных в качестве нового словаря каждый раз, когда я вызываю «сохранять», а не заменяю каждый раз на старый. У меня пока нет таблицы, потому что я не знаю, как это должно выглядеть. –

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