2013-06-27 7 views
-3

Я использовал NSUserDefaults и NSkeyedArchive раньше, но я не думаю, что он будет работать для моего нового проекта ..Сохранение массива простой способ

получить данные обратно из JSON и хранить его в массив (имя, возраст, страна) (все NSString)

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

И покажите сохраненные данные в другом представлении таблицы. (Цикл по массиву и получить все объекты обратно)

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

Короче я хочу функция, как вы видите в "домашнем приложении", где вы можете "любимый/сохранить дом"

- Обновление

viewDidLoad

NSString *docDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 
NSString *filePath = [docDir stringByAppendingPathComponent:@"Names.plist"]; 

NSMutableArray *array = [[NSMutableArray alloc] initWithContentsOfFile:filePath]; 

arrayWithNames = [[NSMutableArray alloc]init]; 
[arrayWithNames addObjectsFromArray:array]; 

SaveButton

NSMutableArray *nameInfo = [[NSMutableArray alloc]initWithObjects:self.name,self.age,self.country, nil]; 

[arrayWithNames addObjectsFromArray:nameInfo]; 



NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 
NSString *path = [documentsDirectory stringByAppendingPathComponent:@"Names.plist"]; 


[arrayWithNames writeToFile:path atomically:YES]; 

Это работает, но я получаю все данные вместе, а каждый массив как самостоятельный объект

Кстати я сделал уверен, что не может быть NULL :)

+0

Отъезда 'NSCoding'. – msgambel

+0

Используйте '[NSArray writeToFile: atomically:]' или сохраните массив в 'NSUserDefaults'. – rmaddy

+0

@rmaddy, но если я использую это, я каждый раз перезаписываю файл. – MichaelAngelo

ответ

1

Пока все данные есть NSString значения, как вы говорите, вы можете просто использовать writeToFile:atomically: для сохранения массива в файл. Однако, JSON иногда содержит нули, которые несовместимы с этим методом. Если вы попытаетесь использовать этот метод при наличии нулей, он выдает исключение. Если есть вероятность получить нуль (и почти всегда есть шанс), вам нужно принять некоторые меры предосторожности. Несколько возможностей:

  • Сделайте изменяемые копии своих данных, пропустите их и удалите нули или замените их чем-нибудь другим (например, пустой строкой).
  • Преобразуйте данные обратно в JSON через [NSJSONSerialization dataWithJSONObject:options:error:], а затем напишите полученный файл NSData в файл.
+0

проверить обновленный вопрос – MichaelAngelo

0

Я не совсем понимаю ваш вопрос.

Но в вашем случае, что я сделал создать модель со структурой информации, которую я намеревался хранить (в вашем случае выглядел лицо) и создал массив, в котором я буду добавлять объекты Person

Можно использовать несколько случаев для сохранения, но, на мой взгляд, самым простым будет использование NSUserDefaults (решение зависит в значительной степени от вашей базы данных).

Soo, вы будете иметь модель Person

import <Foundation/Foundation.h> 
@interface Person : NSObject 


@property(nonatomic,strong) NSString *name; 
@property(nonatomic,strong) NSString *country; 
@property(nonatomic,strong) NSString *age; 
... 

С методов шифрования:

- (void)encodeWithCoder:(NSCoder *)encoder { 
    //Encode properties, other class variables, etc 
    [encoder encodeObject:self.name forKey:@"name"]; 
    [encoder encodeObject:self.age forKey:@"age"]; 
    [encoder encodeObject:self.country forKey:@"country"]; 
} 

- (id)initWithCoder:(NSCoder *)decoder { 
    if((self = [super init])) { 
     //decode properties, other class vars 
     self.name = [decoder decodeObjectForKey:@"name "]; 
     self.age = [decoder decodeObjectForKey:@"age"]; 
     self.country = [decoder decodeObjectForKey:@"country"]; 

    } 
    return self; 
} 

Затем вы создаете NSMutableArray где вы добавить свои объекты.

[arrayPeople addObject:person]; 

Когда вы решите хранить в данном приложении вы можете сделать это:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 

NSData *myEncodedObjectShopping = [NSKeyedArchiver archivedDataWithRootObject:arrayPeople]; 
[defaults setObject:myEncodedObjectShopping forKey:@"people"]; 

Чтобы retrive данные:

NSData *myDecodedObject = [defaults objectForKey:@"people"]; 
NSMutableArray *decodedArray =[NSKeyedUnarchiver unarchiveObjectWithData: myDecodedObject]; 
Смежные вопросы