Прочитать файл plist во время выполнения - PullRequest
0 голосов
/ 28 июня 2018

Я включил файл plist в свою программу и назвал его локально

     NSString *plistpath = [[NSBundle mainBundle] pathForResource:@"pli" ofType:@"plist"];
     NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:plistpath];
     NSArray *cont = [dict allValues];

Я хочу, чтобы моя программа считывала файл, когда я обновляю его вручную (не по программе), добавляю или удаляю данные из файла plist во время выполнения, вместо того, чтобы останавливать выполнение и снова запускать его. Есть ли способ, которым я могу достичь этого?

Пожалуйста, помогите

Ответы [ 2 ]

0 голосов
/ 29 июня 2018

Вот способ сохранить ваши данные в файле .plist

NSArray *paths = NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES);

// get documents path

  NSString *documentsPath = [paths objectAtIndex:0];

// get the path to our Data/plist file

 NSString *plistPath = [documentsPath stringByAppendingPathComponent:@"myData.plist"];
                            NSError *writeError = nil;

 NSData *plistData = [NSPropertyListSerialization dataWithPropertyList:yourDictionary format:NSPropertyListXMLFormat_v1_0 options:NSPropertyListImmutable error:&writeError];

        if(plistData)
          {
             [plistData writeToFile:plistPath atomically:YES];
              NSLog(@"Data saved sucessfully");
          }
          else
          {
              NSLog(@"Error in saveData: %@", writeError.localizedDescription);

          }

Считайте лист из пакета и получите из него Root Dictionary

 NSArray *paths = NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES);
 NSString *documentsPath = [paths objectAtIndex:0];
 NSString *plistPath = [documentsPath stringByAppendingPathComponent:@"myData.plist"];


 if (![[NSFileManager defaultManager] fileExistsAtPath:plistPath])
    {
      plistPath = [[NSBundle mainBundle] pathForResource:@"myData" ofType:@"plist"];
    }

 NSDictionary *resultDic = [[NSDictionary alloc] initWithContentsOfFile:plistPath];
0 голосов
/ 28 июня 2018

Вам нужно узнать об ОС dispatch_source_* вызовах (gcd), чтобы вы могли отслеживать изменения папок / файлов.

Начните отсюда: https://developer.apple.com/documentation/dispatch/1385630-dispatch_source_create

Если вы хотите увидеть рабочий пример, вы можете посмотреть на источник https://github.com/tblank555/iMonitorMyFiles

PS: Изменение объектов NSBundle вручную - плохая практика. Похоже, что вам действительно нужно представление настроек, просто сказать.

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