2015-11-22 7 views
1

Создайте файл с помощью Xcode и дайте ему имя . File.plist и сохраняйте как XML. Теперь, чтобы читать и писать этот файл я использую код ниже:Сохраните файл plist не работает

- (void)readPlist{ 

    NSString *filePath = [[NSBundle mainBundle] pathForResource:@"File" ofType:@"plist"]; 
    NSMutableDictionary* plistDict = [[NSMutableDictionary alloc] initWithContentsOfFile:filePath]; 

    NSString *value; 
    value = [plistDict objectForKey:@"Name"]; 

    NSLog(@"%@",value); 

} 

- (void)writeToPlist 
{ 

    NSLog(@"Data is Writing... "); 

    NSString *filePath = [[NSBundle mainBundle] pathForResource:@"File" ofType:@"plist"]; 
    NSMutableDictionary* plistDict = [[NSMutableDictionary alloc] initWithContentsOfFile:filePath]; 

    [plistDict setValue:@"StackOverflow" forKey:@"Name"]; 
    [plistDict writeToFile:filePath atomically: YES]; 

} 

Этот код работает очень хорошо и очень просто, но у меня есть проблема, в viewDidLoad я выполнить эти команды:

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    [self readPlist]; 
    [self writeToPlist]; 
    [self readPlist]; 
} 

Выходной сигнал:

Hello World 
Data is Writing... 
StackOverflow 

Отлично, теперь давайте снова и снова создадим и запустим мое приложение .... и выход будет ТАКОЙ! Строка Hello World продолжают появляться, правильный вывод должен быть:

StackOverflow 
Data is Writing... 
StackOverflow 

, почему это происходит и как решить эту проблему?

ответ

1

Приложение в iOS доступно только для чтения.

Поместите свой файл plist в каталог документов приложения.

2

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

// Get the plist from the documents directory 
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths firstObject]; 
NSString *path = [documentsDirectory stringByAppendingPathComponent:@"File.plist"]; 
NSMutableArray *content = [NSMutableArray arrayWithContentsOfFile:path]; 


// Save plist 
[content writeToFile:path atomically: YES];