/ / Збереження NSMutableArray NSObjects в NSUserDefaults - ios, object-c, xcode, nsmutablearray, nsuserdefaults

Збереження NSMutableArray NSObjects в NSUserDefaults - ios, object-c, xcode, nsmutablearray, nsuserdefaults

В даний час я пишу додаток для iPhone, і одна з вимог до дизайну, яку мені потрібно дотримуватися, полягає в наступному:

Магазин NSObjects в a NSMutableArray, відображення даних на a UITableView і зберегти дані в NSUserDefaults. Я вмію зберігати NSObject в a NSMutableArray і відобразити його в UITableView, але мені потрібна допомога, щоб зрозуміти, як зберігати дані NSObject до NSUserDefaults.

Моє визначення для NSObject (.h):

    #import <Foundation/Foundation.h>
@interface Name : NSObject
@property (nonatomic)NSString *name;
@property (nonatomic)NSInteger score;
@end

Моя реалізація NSObject (.m)

    #import "Name.h"
@implementation Name
-(id)initWithName:(NSString*)name andScore:(NSInteger)score
{
_name = name;
_score= score;
return [super init];
}
@end

Ось як я зберігаю свою NSObject:

    NSString *newName = _submitNameTextBox.text;
NSInteger score = 0;
Name *name = [[Name alloc] init];//Name is the object name
name.name = newName;
name.score = score;
AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
NSMutableArray *listTemp = appDelegate.nameList; //main copy of my list is in app delegate, but i have it accessible by my uiviewcontrollers.

я додаю NSObjects в моєму secondUIViewControllerта відображати дані в моєму третьомуUIViewController, тоді як мій перший - це основний екран маніпуляцій із збереженими даними.

Отже, моє запитання, враховуючи код, який я використовував для визначення свого NSObject і як я зберігаю зазначений об’єкт в a NSMutableArray, як я зберігаю NSMutableArray до NSUserDefaults на вимкнення програми. Ідея - масив повинен завантажувати програмний масив даними з останнього запуску, щоб користувач міг відслідковувати свої дані.

Відповіді:

2 для відповіді № 1

Якщо вам потрібно написати масив, що містить рядок, тоді:

Збереження:

[[NSUserDefaults standardUserDefaults] setObject:yourArray forKey:@"ArrayKey"];

Читання:

NSMutableArray *array = [NSMutableArray arrayWithArray:[[NSUserDefaults standardUserDefaults] objectForKey:@"ArrayKey"]];

Оскільки вам потрібно записати масиви, що містять об'єкти, вам потрібно кодувати їх і використовувати Archiver.

- (void)encodeWithCoder:(NSCoder *)coder {
[coder encodeObject:array forKey:@"array"];
}

- (id)initWithCoder:(NSCoder *)coder {
array=[coder decodeObjectForKey:@"array"];
return self;
}


- (NSData *)dataOfType:(NSString *)typeName error:(NSError **)outError
{
return nil;
}

- (BOOL)readFromData:(NSData *)data ofType:(NSString *)typeName error:(NSError **)outError
{
yourObject=[NSKeyedUnarchiver unarchiveObjectWithData:data];
NSLog(@"array is ->%@",[yourObject array]);
return YES;
}

2 для відповіді № 2

Потрібно зберігати масив після завершення роботи програми, використовуючи applicationDidEnterBackground подія вашого делегата додатків.

- (void)applicationDidEnterBackground:(UIApplication *)application
{
[[NSUserDefaults standardUserDefaults] setObject:nameList forKey:@"dataArray"];
}

Коли додаток завантажується знову, вам потрібно завантажити дані за допомогою didFinishLaunchingWithOptions делегат вашого делегата програми.

-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
nameList = (NSMutableArray *)[[NSUserDefaults standardUserDefaults] objectForKey:@"dataArray"];
if(!nameList)
{
//First time load or data is not saved yet
}
}

0 для відповіді № 3

Концепція досить проста. Ви створюєте об'єкт Ім'я класу та показуєте його в UITableView. Коли ви створюєте об'єкт і відображаєте його в UiTableView, працюючи з адресою пам'яті, ви просто виймаєте живий об'єкт з NSMutableArray, тоді як ви намагаєтеся зберегти об'єкт у NSUserDefaults і повторно запустити додаток, ви нічого не отримаєте, оскільки посилання буде вбито, тому замість цього збережіть Дані, поставлені у вашому об'єкті класу, inform, String або, Dictionary.