Object 保存包含自定义类对象的NSMutableArray的内容
我有一个自定义类“Bookmark”,它包含一个Object 保存包含自定义类对象的NSMutableArray的内容,object,nsmutablearray,save,Object,Nsmutablearray,Save,我有一个自定义类“Bookmark”,它包含一个NSString。我使用NSMutableArray来存储此类的实例,从而生成一个书签列表,我使用UITableViewCell原型将其显示在UITableView中 请有人给出一些建议/示例,说明如何将NSMutableArray中的实例保存到一个文件中(以及如何加载它们的示例)。我找不到任何能起作用的例子。我尝试将数组转换为NSData并使用NSKeyedArchiver,但没有成功。我也尝试过转换成NSArray,但无法让它工作 在自定义类中
NSString
。我使用NSMutableArray
来存储此类的实例,从而生成一个书签列表,我使用UITableViewCell
原型将其显示在UITableView
中
请有人给出一些建议/示例,说明如何将NSMutableArray
中的实例保存到一个文件中(以及如何加载它们的示例)。我找不到任何能起作用的例子。我尝试将数组转换为NSData
并使用NSKeyedArchiver
,但没有成功。我也尝试过转换成NSArray
,但无法让它工作
在自定义类中,我实现了encodeWithCode
和initWithCoder
我需要在应用程序关闭前保存,并在应用程序启动时加载列表
我被卡住了…:(
编辑:应AGEEK的请求,以下是代码片段:
在my Bookmark类的实现中:
- (void) encodeWithCoder: (NSCoder *) encoder
{
[encoder encodeObject:self.address forKey:@"Address"];
}
- (id) initWithCoder: (NSCoder *) decoder
{
self = [super init];
if (self != nil)
{
self.address = [decoder decodeObjectForKey: @"Address"];
}
return self;
}
在我的MasterViewController中
self.bookmarks
是一个包含书签对象的NSMutableArray
。(调用下面的代码时,书签数组中至少有一个条目。)
我终于明白了我的问题所在。 因为我正在iPhone设备上调试,某些文件夹不可写。我使用的代码要求在这样的区域中找到一个位置(
NSDocumentationDirectory
):
最终找到=>
我理解我的问题,并让它发挥作用
我需要做的是替换:
NSString *docFolder = [NSSearchPathForDirectoriesInDomains(NSDocumentationDirectory,NSUserDomainMask,YES) lastObject];
NSString *filename = [docFolder stringByAppendingPathComponent:@"data.plist"];
与:
我还将这些行(与示例一致)更改为:
致:
应用程序启动时将文件读入NSMutableArray
的代码为:
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory,NSUserDomainMask,YES);
NSString *libFolder = [paths objectAtIndex: 0];
NSString *filename = [libFolder stringByAppendingPathComponent: @"data.archive"];
self.bookmarks = [NSKeyedUnarchiver unarchiveObjectWithFile: filename];
您能否向我们展示encodeWithCoder:和initWithCoder:方法实现?以及将数组保存到文件中的代码?
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory,NSUserDomainMask,YES);
NSString *libFolder = [paths objectAtIndex: 0];
NSString *filename = [libFolder stringByAppendingPathComponent: @"data.archive"];
NSData *data = [NSKeyedArchiver archivedDataWithRootObject: self.bookmarks ];
if ([data writeToFile: filename atomically: YES])
{
NSLog(@"Successful write");
} else {
NSLog(@"Failed write");
}
BOOL success = [NSKeyedArchiver archiveRootObject: self.bookmarks toFile: filename];
if (success)
{
NSLog(@"Successful write");
} else {
NSLog(@"Failed write");
}
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory,NSUserDomainMask,YES);
NSString *libFolder = [paths objectAtIndex: 0];
NSString *filename = [libFolder stringByAppendingPathComponent: @"data.archive"];
self.bookmarks = [NSKeyedUnarchiver unarchiveObjectWithFile: filename];