Чтение Письмо к плейсту Iphone - PullRequest
1 голос
/ 24 марта 2011

Я видел довольно много вопросов по этому поводу, но, похоже, не могу найти тот, который соответствует моим потребностям.

У меня есть лист, который выглядит следующим образом

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Content</key>
    <array>
        <dict>
            <key>dateAdd</key>
            <date>2011-03-23T14:40:47Z</date>
            <key>content</key>
            <string>Content first</string>
            <key>Title</key>
            <string>Title 1</string>
        </dict>
        <dict>
            <key>dateAdd</key>
            <date>2011-03-23T14:40:47Z</date>
            <key>content</key>
            <string>Content here</string>
            <key>Title</key>
            <string>Title 2</string>
        </dict>
    </array>
</dict>
</plist>

Я получаю информацию из списка, как это

В первом классе

//points to the plist
    NSString *path = [[NSBundle mainBundle] bundlePath];
    NSString *url = [path stringByAppendingPathComponent:@"Details.plist"];

    //filling with contents of plist
    NSDictionary *Data = [[NSDictionary alloc] initWithContentsOfFile:url];
    self.contentData = Data;
    [Data release];

Во втором классе я создаю экземпляр этого класса и извлекаю информацию

Petite_NotesAppDelegate *instance = (Petite_NotesAppDelegate *)[[UIApplication sharedApplication] delegate];

self.dataArray = [instance.contentData objectForKey:@"Content"];

Это позволяет получить содержимое из списка, подобного этому

NSDictionary *Content = [self.dataArray objectAtIndex:indexPath.row];
    cell.textLabel.text = [Content objectForKey:@"Title"];

Моя проблема в том, что я не могу написать в список

Поскольку содержимое, которое я хочу записать, находится в массиве содержимого plist, а затем внутри элемента 0, элемента 1 и т. Д. Как записать содержимое в массив содержимого в plist? Допустим, я хочу написать контент из текстового поля ...

Спасибо за любую помощь !!

Ответы [ 3 ]

7 голосов
/ 24 марта 2011

Проблема в том, что вы, вероятно, пытаетесь записать в тот же файл, из которого читаете.Боюсь, что это невозможно - вы читаете из пакета приложений , который только для чтения .Если вы хотите сохранить свои изменения на диск, вам нужно записать свой словарь в список, расположенный в каталоге Documents .

Чтобы получить путь к каталогу Documents, вам нужно сделать следующее(есть и другие способы сделать это):

NSArray *paths = NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];

// you will read and write to this path
NSString *url = [documentsDirectory stringByAppendingPathComponent:@"Details.plist"];

Это также означает, что при запуске приложения вы должны проверить, существует ли файл Details.plist в вашем каталоге Documents , если это так, читать из него, в противном случае вернуться к чтению из пакета приложения .

0 голосов
/ 18 июля 2012

Это может быть легко обработано массивом Deepcopy

-(void) WriteOverSamePlist : (NSNumber *) num {
    NSString *appPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"storedRowIds.plist"];
    NSMutableArray *arr =  [[NSMutableArray alloc] initWithArray:[self ReadArrayFromPlist] copyItems:YES]; //[[NSMutableArray alloc] initWithObjects:@"this", @"is" , nil];
    [arr addObject:num];
    BOOL fileExists = [arr writeToFile:appPath atomically:YES]; 

    if(fileExists) {
        NSLog(@"successfully written");
    } else {
        NSLog(@"failed to write");
    }
}


-(NSMutableArray*) ReadArrayFromPlist {
    NSString *appPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"storedRowIds.plist"];
    NSMutableArray *coolArray = [NSMutableArray arrayWithContentsOfFile:appPath];
    return coolArray;
}
0 голосов
/ 24 марта 2011

Вы можете внести изменения в словарь и затем использовать writeToFile:

Sample

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...