Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.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
Objective c NSCoding-initWithCoder和以前编码的对象缺少属性_Objective C_Nscoding - Fatal编程技术网

Objective c NSCoding-initWithCoder和以前编码的对象缺少属性

Objective c NSCoding-initWithCoder和以前编码的对象缺少属性,objective-c,nscoding,Objective C,Nscoding,我对NSCoding方法有一些问题。 当我保存我的自定义类时,看起来一切正常,它实际上在我的文档目录中创建了一个.plist文件,该文件包含一个NSMutableArray,其中包含了我的自定义对象 下面是我的自定义对象的接口和实现 H 下面是我用来查找文档目录路径的代码 这里介绍了保存和加载数据的两种方法 在我的应用程序中,我有两个TableViewController 具有两个自定义对象的tableView对象单元格显示图像、带标题的标签和带类型的标签,当我在单元格中单击时,这会自动将该对象

我对NSCoding方法有一些问题。 当我保存我的自定义类时,看起来一切正常,它实际上在我的文档目录中创建了一个.plist文件,该文件包含一个NSMutableArray,其中包含了我的自定义对象

下面是我的自定义对象的接口和实现

H 下面是我用来查找文档目录路径的代码

这里介绍了保存和加载数据的两种方法

在我的应用程序中,我有两个TableViewController

具有两个自定义对象的tableView对象单元格显示图像、带标题的标签和带类型的标签,当我在单元格中单击时,这会自动将该对象保存在收藏夹列表中

以及加载收藏夹数组的表视图。当我加载数组时,它实际上拥有我以前保存的正确数量的自定义对象

但从日志中我可以理解发生了一些奇怪的事情:

2012-04-15 20:37:52.910 Fav[565:15803] ESISTE un file e l'instance dell'array è ---> (
    "<CustomObj: 0x806d790>",
    "<CustomObj: 0x806d850>",
    "<CustomObj: 0x806d830>",
    "<CustomObj: 0x806d9d0>",
    "<CustomObj: 0x806d9d0>",
)
2012-04-15 20:37:52.910 Fav[565:15803] L'array was loaded, and it is composed by --> 5 objects
2012-04-15 20:37:52.912 Fav[565:15803] INSTANCE CustObj PER CELLA - NUMERO #0_______________
2012-04-15 20:37:52.912 Fav[565:15803] NUOVA INSTANCE - Instance title --> (null)
2012-04-15 20:37:52.912 Fav[565:15803] NUOVA INSTANCE - Instance type --> (null)
2012-04-15 20:37:52.913 Fav[565:15803] NUOVA INSTANCE - Instance image --> (null)
2012-04-15 20:37:52.914 Fav[565:15803] INSTANCE CustObj PER CELLA - NUMERO #1_______________
2012-04-15 20:37:52.914 Fav[565:15803] NUOVA INSTANCE - Instance title --> (null)
2012-04-15 20:37:52.914 Fav[565:15803] NUOVA INSTANCE - Instance type --> (null)
2012-04-15 20:37:52.914 Fav[565:15803] NUOVA INSTANCE - Instance image --> (null)
2012-04-15 20:37:52.915 Fav[565:15803] INSTANCE CustObj PER CELLA - NUMERO #2_______________
2012-04-15 20:37:52.915 Fav[565:15803] NUOVA INSTANCE - Instance title --> (null)
2012-04-15 20:37:52.915 Fav[565:15803] NUOVA INSTANCE - Instance type --> (null)
2012-04-15 20:37:52.916 Fav[565:15803] NUOVA INSTANCE - Instance image --> (null)
2012-04-15 20:37:52.916 Fav[565:15803] INSTANCE CustObj PER CELLA - NUMERO #3_______________
2012-04-15 20:37:52.917 Fav[565:15803] NUOVA INSTANCE - Instance title --> (null)
2012-04-15 20:37:52.917 Fav[565:15803] NUOVA INSTANCE - Instance type --> (null)
2012-04-15 20:37:52.917 Fav[565:15803] NUOVA INSTANCE - Instance image --> <UIImage: 0x843acf0>
2012-04-15 20:37:52.917 Fav[565:15803] INSTANCE CustObj PER CELLA - NUMERO #4_______________
2012-04-15 20:37:52.918 Fav[565:15803] NUOVA INSTANCE - Instance title --> (null)
2012-04-15 20:37:52.918 Fav[565:15803] NUOVA INSTANCE - Instance type --> (null)
2012-04-15 20:37:52.918 Fav[565:15803] NUOVA INSTANCE - Instance image --> <UIImage: 0x843acf0>
我不明白为什么我的customObj的所有IVAR都是零,但最后两个实例中实际上有图像?我的对象是相同的,但只有一个我可以实际加载图像并在tableView中显示它


我只能想象我的编码器坏了。我真的提前感谢您的回答:

我怀疑您的引用较弱,对象正在被释放。显示实例变量的声明(如果您自己声明过)和属性的声明。如果您自己实现了访问器,请展示这些实现。我真的非常感谢您的正确!!现在一切正常:!我怀疑你的引用很弱,对象正在被释放。显示实例变量的声明(如果您自己声明过)和属性的声明。如果您自己实现了访问器,请展示这些实现。我真的非常感谢您的正确!!现在一切正常:!
- (void)encodeWithCoder:(NSCoder *)aCoder
{

    [aCoder encodeObject: _titleCobj forKey:@"Title"];

  [aCoder encodeObject: _typeCobj forKey:@"Type"];

   [aCoder encodeObject: _imageCobj forKey:@"Image"];
}

- (id)initWithCoder:(NSCoder *)aDecoder
{
    self = [super init];
    if (self) {

        NSString *title = [aDecoder decodeObjectForKey:@"Title"];
        self.titleCobj = title;

        NSString *type = [aDecoder decodeObjectForKey:@"Type"];
        self.typeCobj = type;

        UIImage *image = [aDecoder decodeObjectForKey:@"Image"];
        self.imageCobj = image;

    }
    return self;
}
- (NSString *)documentsDirectory
{
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    return documentsDirectory;
}

- (NSString *)dataFilePath
{
    return [[self documentsDirectory] stringByAppendingPathComponent:@"Favorites.plist"];
}
- (void)load
{
    NSString *path = [self dataFilePath];

    if ([[NSFileManager defaultManager] fileExistsAtPath:path])
    {
        NSLog (@"<__________________________LOADING__________________________>");

        NSData *data = [[NSData alloc] initWithContentsOfFile:path];
        NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];
        self.favorites = [unarchiver decodeObjectForKey:@"Favorites"];
        [unarchiver finishDecoding];


    } else {

        NSLog (@"<__________________________FIRST TIME LOAD__________________________>");

        self.favorites = [[NSMutableArray alloc] initWithCapacity:20];
 }
}


- (void)save
{
    NSMutableData *data = [[NSMutableData alloc] init];
    NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];
    [archiver encodeObject:_favorites forKey:@"Favorites"];
    [archiver finishEncoding];
    [data writeToFile:[self dataFilePath] atomically:YES];
}
2012-04-15 20:37:52.910 Fav[565:15803] ESISTE un file e l'instance dell'array è ---> (
    "<CustomObj: 0x806d790>",
    "<CustomObj: 0x806d850>",
    "<CustomObj: 0x806d830>",
    "<CustomObj: 0x806d9d0>",
    "<CustomObj: 0x806d9d0>",
)
2012-04-15 20:37:52.910 Fav[565:15803] L'array was loaded, and it is composed by --> 5 objects
2012-04-15 20:37:52.912 Fav[565:15803] INSTANCE CustObj PER CELLA - NUMERO #0_______________
2012-04-15 20:37:52.912 Fav[565:15803] NUOVA INSTANCE - Instance title --> (null)
2012-04-15 20:37:52.912 Fav[565:15803] NUOVA INSTANCE - Instance type --> (null)
2012-04-15 20:37:52.913 Fav[565:15803] NUOVA INSTANCE - Instance image --> (null)
2012-04-15 20:37:52.914 Fav[565:15803] INSTANCE CustObj PER CELLA - NUMERO #1_______________
2012-04-15 20:37:52.914 Fav[565:15803] NUOVA INSTANCE - Instance title --> (null)
2012-04-15 20:37:52.914 Fav[565:15803] NUOVA INSTANCE - Instance type --> (null)
2012-04-15 20:37:52.914 Fav[565:15803] NUOVA INSTANCE - Instance image --> (null)
2012-04-15 20:37:52.915 Fav[565:15803] INSTANCE CustObj PER CELLA - NUMERO #2_______________
2012-04-15 20:37:52.915 Fav[565:15803] NUOVA INSTANCE - Instance title --> (null)
2012-04-15 20:37:52.915 Fav[565:15803] NUOVA INSTANCE - Instance type --> (null)
2012-04-15 20:37:52.916 Fav[565:15803] NUOVA INSTANCE - Instance image --> (null)
2012-04-15 20:37:52.916 Fav[565:15803] INSTANCE CustObj PER CELLA - NUMERO #3_______________
2012-04-15 20:37:52.917 Fav[565:15803] NUOVA INSTANCE - Instance title --> (null)
2012-04-15 20:37:52.917 Fav[565:15803] NUOVA INSTANCE - Instance type --> (null)
2012-04-15 20:37:52.917 Fav[565:15803] NUOVA INSTANCE - Instance image --> <UIImage: 0x843acf0>
2012-04-15 20:37:52.917 Fav[565:15803] INSTANCE CustObj PER CELLA - NUMERO #4_______________
2012-04-15 20:37:52.918 Fav[565:15803] NUOVA INSTANCE - Instance title --> (null)
2012-04-15 20:37:52.918 Fav[565:15803] NUOVA INSTANCE - Instance type --> (null)
2012-04-15 20:37:52.918 Fav[565:15803] NUOVA INSTANCE - Instance image --> <UIImage: 0x843acf0>