Как я могу сохранять, извлекать, удалять и обновлять свои данные в файле Plist в ios?
Я создаю приложение для iPhone, в котором я получаю название всех стран, логотип и название плеера. Я хочу сохранить эти данные в .plist
вместо sqlite
сервера. Я не знаю, как создать файл plist в DocumentDirectory
и сохранить данные.
Пожалуйста, кто-нибудь посоветуйте мне, как сохранить данные в файле plist.
4 ответа:
Я прохожу через скриншот и шаг за шагом. Пожалуйста, следуйте этому, и вы получите свой ответ.
Сначала вы должны создать список свойств с помощью Xcode.
Шаг:1
Шаг:2
Шаг:3
Сохранение данных при нажатии кнопки Сохранить:
// Take 3 array for save the data ..... -(IBAction)save_Action:(id)sender { NSArray *paths = NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsPath = [paths objectAtIndex:0]; NSString *plistPath = [documentsPath stringByAppendingPathComponent:@"manuallyData.plist"]; [self.nameArr addObject:self.nameField.text]; [self.countryArr addObject:self.countryField.text]; [self.imageArr addObject:@"image.png"]; NSDictionary *plistDict = [[NSDictionary alloc] initWithObjects: [NSArray arrayWithObjects: self.nameArr, self.countryArr, self.imageArr, nil] forKeys:[NSArray arrayWithObjects: @"Name", @"Country",@"Image", nil]]; NSError *error = nil; NSData *plistData = [NSPropertyListSerialization dataFromPropertyList:plistDict format:NSPropertyListXMLFormat_v1_0 errorDescription:&error]; if(plistData) { [plistData writeToFile:plistPath atomically:YES]; alertLbl.text = @"Data saved sucessfully"; } else { alertLbl.text = @"Data not saved"; } } // Data is saved in your plist and plist is saved in DocumentDirectory
Шаг:4
Извлечение данных из файла plist:
NSArray *paths = NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsPath = [paths objectAtIndex:0]; NSString *plistPath = [documentsPath stringByAppendingPathComponent:@"manuallyData.plist"]; if (![[NSFileManager defaultManager] fileExistsAtPath:plistPath]) { plistPath = [[NSBundle mainBundle] pathForResource:@"manuallyData" ofType:@"plist"]; } NSDictionary *dict = [[NSDictionary alloc] initWithContentsOfFile:plistPath]; self.nameArr = [dict objectForKey:@"Name"]; self.countryArr = [dict objectForKey:@"Country"];
Шаг:5
Удалить данные из файл plist:
NSArray *paths = NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsPath = [paths objectAtIndex:0]; NSString *plistPath = [documentsPath stringByAppendingPathComponent:@"manuallyData.plist"]; NSMutableDictionary *dictionary = [NSMutableDictionary dictionaryWithContentsOfFile:(NSString *)plistPath]; self.nameArr = [dictionary objectForKey:@"Name"]; self.countryArr = [dictionary objectForKey:@"Country"]; [self.nameArr removeObjectAtIndex:indexPath.row]; [self.countryArr removeObjectAtIndex:indexPath.row]; [dictionary writeToFile:plistPath atomically:YES];
Шаг:6
Обновите данные при нажатии кнопки Обновить действие:
NSArray *paths = NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsPath = [paths objectAtIndex:0]; NSString *plistPath = [documentsPath stringByAppendingPathComponent:@"manuallyData.plist"]; if (![[NSFileManager defaultManager] fileExistsAtPath:plistPath]) { plistPath = [[NSBundle mainBundle] pathForResource:@"manuallyData" ofType:@"plist"]; } self.plistDic = [[NSDictionary alloc] initWithContentsOfFile:plistPath]; [[self.plistDic objectForKey:@"Name"] removeObjectAtIndex:self.indexPath]; [[self.plistDic objectForKey:@"Country"] removeObjectAtIndex:self.indexPath]; [[self.plistDic objectForKey:@"Image"] removeObjectAtIndex:self.indexPath]; [[self.plistDic objectForKey:@"Name"] insertObject:nameField.text atIndex:self.indexPath]; [[self.plistDic objectForKey:@"Country"] insertObject:countryField.text atIndex:self.indexPath]; [[self.plistDic objectForKey:@"Image"] insertObject:@"dhoni.jpg" atIndex:self.indexPath]; [self.plistDic writeToFile:plistPath atomically:YES];
Ниже приведен код для чтения и записи данных .файл plist.SWIFT 3.0
- создайте данные.файл plist.
Убедитесь,что корневой объект имеет тип Dictionary.
class PersistanceViewControllerA: UIViewController { @IBOutlet weak var nationTextField: UITextField! @IBOutlet weak var capitalTextField: UITextField! @IBOutlet weak var textView: UITextView! override func viewDidLoad() { super.viewDidLoad() displayNationAndCapitalCityNames() //Get Path func getPath() -> String { let plistFileName = "data.plist" let paths = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true) let documentPath = paths[0] as NSString let plistPath = documentPath.appendingPathComponent(plistFileName) return plistPath } //Display Nation and Capital func displayNationAndCapitalCityNames() { let plistPath = self.getPath() self.textView.text = "" if FileManager.default.fileExists(atPath: plistPath) { if let nationAndCapitalCitys = NSMutableDictionary(contentsOfFile: plistPath) { for (_, element) in nationAndCapitalCitys.enumerated() { self.textView.text = self.textView.text + "\(element.key) --> \(element.value) \n" } } } } //On Click OF Submit @IBAction func onSubmit(_ sender: UIButton) { let plistPath = self.getPath() if FileManager.default.fileExists(atPath: plistPath) { let nationAndCapitalCitys = NSMutableDictionary(contentsOfFile: plistPath)! nationAndCapitalCitys.setValue(capitalTextField.text!, forKey: nationTextField.text!) nationAndCapitalCitys.write(toFile: plistPath, atomically: true) } nationTextField.text = "" capitalTextField.text = "" displayNationAndCapitalCityNames() } }
выход:
<?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>Canada</key> <string>Ottawa</string> <key>China</key> <string>Beijin</string> <key>Germany</key> <string>Berlin</string> <key>United Kingdom</key> <string>London</string> <key>United States of America</key> <string>Washington, D.C.</string> </dict> </plist>
Простой Пример
NSString *filePath=[[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0] stringByAppendingPathComponent:@"country.plist"]; // ADD Plist File NSMutableArray *arr=[[NSMutableArray alloc]initWithObjects:@"India",@"USA" ,nil]; [arr writeToFile:filePath atomically:YES]; //Update NSFileManager *fm=[NSFileManager defaultManager]; [arr removeObjectIdenticalTo:@"India"]; [fm removeItemAtPath:filePath error:nil]; [arr writeToFile:filePath atomically:YES]; // Read NSMutableArray *arr=[[NSMutableArray alloc]initWithContentsOfFile:filePath];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES); NSString *documentsDirectory = [paths objectAtIndex:0]; NSString *path = [documentsDirectory stringByAppendingPathComponent:@"plist.plist"]; NSFileManager *fileManager = [NSFileManager defaultManager]; if (![fileManager fileExistsAtPath: path]) { path = [documentsDirectory stringByAppendingPathComponent: [NSString stringWithFormat: @"yourfilename.plist"]]; } NSMutableDictionary *data = [[NSMutableDictionary alloc] initWithContentsOfFile: path]; NSFileManager *fileManager = [NSFileManager defaultManager]; NSMutableDictionary *data; if ([fileManager fileExistsAtPath: path]) { data = [[NSMutableDictionary alloc] initWithContentsOfFile: path]; } else { // If the file doesn’t exist, create an empty dictionary data = [[NSMutableDictionary alloc] init]; } //To insert the data into the plist int value = 5; [data setObject:[NSNumber numberWithInt:value] forKey:@"value"]; [data writeToFile: path atomically:YES]; //To retrieve the data from the plist NSMutableDictionary *savedStock = [[NSMutableDictionary alloc] initWithContentsOfFile: path]; int savedvalue; savedvalue = [[savedStock objectForKey:@"value"] intValue]; NSLog(@“%d”, savedvalue);