OGeek|极客世界-中国程序员成长平台

标题: ios - 写入和读取自定义对象到文件IOS [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-13 02:51
标题: ios - 写入和读取自定义对象到文件IOS

我有这个对象。

@interface SeccionItem : NSObject <NSCoding>
{
    NSString * title;
    NSString * texto;
    NSArray * images;
}

@property (nonatomic,strong) NSString * title;
@property (nonatomic,strong) NSString * texto;
@property (nonatomic,strong) NSArray * images;

@end

有了这个实现

@implementation SeccionItem
@synthesize title,texto,images;


- (void) encodeWithCoderNSCoder *)encoder {
    [encoder encodeObject:title forKey"title"];
    [encoder encodeObject:texto forKey"texto"];
    [encoder encodeObject:images forKey"images"];
}

- (id)initWithCoderNSCoder *)decoder {
    title = [decoder decodeObjectForKey"title"];
    texto = [decoder decodeObjectForKey"texto"];
    images = [decoder decodeObjectForKey"images"];
    return self;
}

@end

我想将一个填充了这些对象的数组保存到磁盘上的一个文件中。

我正在这样做:

[NSKeyedArchiver archiveRootObject:arr toFile:file];

阅读

NSArray *entries = [NSKeyedUnarchiver unarchiveObjectWithFile:name];
return entries;

但是读取的数组总是空的,我不知道为什么,我有一些问题。

我应该使用什么格式的文件路径?在 toFile:?

对象上的 NSArray 是用 NSData 对象填充的,所以我可以对它们进行编码吗?

我真的迷路了。



Best Answer-推荐答案


查看 NSKeyedArchiver 的文档,尤其是 archiveWithRootObject:toFile:方法。

路径基本上是文件应该存储的位置,包括文件名。例如,您可以将数组存储在应用程序的 Documents 文件夹中,文件名为 Storage。下面的代码片段很常见:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *docDir = [paths objectAtIndex: 0]; 
NSString* docFile = [docDir stringByAppendingPathComponent: @"Storage"];

使用 NSSearchPathForDirectoriesInDomains 方法代替绝对路径,因为 Apple 可以根据需要更改 Documents 文件夹路径。

您可以使用上面的 docFile 字符串提供给 archiveWithRootObject:toFile: 方法的 toFile 参数。

关于ios - 写入和读取自定义对象到文件IOS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16935321/






欢迎光临 OGeek|极客世界-中国程序员成长平台 (http://sqlite.in/) Powered by Discuz! X3.4