Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Object 保存包含自定义类对象的NSMutableArray的内容_Object_Nsmutablearray_Save - Fatal编程技术网

Object 保存包含自定义类对象的NSMutableArray的内容

Object 保存包含自定义类对象的NSMutableArray的内容,object,nsmutablearray,save,Object,Nsmutablearray,Save,我有一个自定义类“Bookmark”,它包含一个NSString。我使用NSMutableArray来存储此类的实例,从而生成一个书签列表,我使用UITableViewCell原型将其显示在UITableView中 请有人给出一些建议/示例,说明如何将NSMutableArray中的实例保存到一个文件中(以及如何加载它们的示例)。我找不到任何能起作用的例子。我尝试将数组转换为NSData并使用NSKeyedArchiver,但没有成功。我也尝试过转换成NSArray,但无法让它工作 在自定义类中

我有一个自定义类“Bookmark”,它包含一个
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];