我目前正在为iPhone编写应用程序,我需要遵循的设计要求之一是:
将NSObjects
存储到NSMutableArray
,将数据显示为UITableView
并将数据保存到NSUserDefaults
。我可以将NSObject
存储到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
,并在我的thirdUIViewController中显示数据,而我的第一个是存储数据的基本操作屏幕。
所以我的问题是,鉴于我用来定义NSObject
的代码以及如何将所述对象存储到NSMutableArray
,我如何将NSMutableArray
存储到NSUserDefaults
关于app关闭。想法是数组需要使用上次运行的数据加载程序数组,因此用户可以跟踪他/她的数据。
答案 0 :(得分:2)
如果你需要编写包含字符串的数组,那么:
保存:
[[NSUserDefaults standardUserDefaults] setObject:yourArray forKey:@"ArrayKey"];
阅读:
NSMutableArray *array = [NSMutableArray arrayWithArray:[[NSUserDefaults standardUserDefaults] objectForKey:@"ArrayKey"]];
当您需要编写包含对象的Array时,您需要对它们进行编码并使用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;
}
答案 1 :(得分:2)
您需要在应用程序终止时使用App Delegate的applicationDidEnterBackground
事件存储数组。
- (void)applicationDidEnterBackground:(UIApplication *)application
{
[[NSUserDefaults standardUserDefaults] setObject:nameList forKey:@"dataArray"];
}
当您的应用再次加载时,您需要使用App代理的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
}
}
答案 2 :(得分:0)
这个概念非常简单。您正在创建类Name的对象,并在UITableView中显示它。当您创建一个对象并在UiTableView中显示它时,您使用内存地址,您只需从NSMutableArray中获取活动对象,而您尝试在NSUserDefaults中保存该对象,并重新运行该应用程序,您什么也得不到,因为该引用将被杀死,因此保存您的类对象中的数据通知,字符串或,字典..