首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSCoding和ARC

NSCoding和ARC
EN

Stack Overflow用户
提问于 2013-06-21 01:05:53
回答 1查看 268关注 0票数 0

我想存档我的自定义对象。ClassA拥有一个字典,它的值是ClassB的实例。

一切看起来都很好,ClassA的initWithCoder被声明为strong,但是在init返回之后,我调用了callMeAfterInit,_dictionary是空的(不是null,一个有效的空字典)。

这应该很简单,但是我没有太多地使用归档,所以我可能遗漏了一些基本的东西。在init返回后,什么可能会导致字典被清空?

下面是必要的代码:

代码语言:javascript
复制
@interface ClassA : NSObject <NSCoding>
@property (strong, nonatomic) NSMutableDictionary *dictionary;
@end

@implementation ClassA

- (void)encodeWithCoder:(NSCoder *)encoder {

    [encoder encodeObject:self.dictionary forKey:@"dictionary"];
}

- (id)initWithCoder:(NSCoder *)decoder {

    self = [super init];
    if (self) {
        _dictionary = [decoder decodeObjectForKey:@"dictionary"];
        // breakpoint here and I can inspect a good dictionary, full of ClassB values
    }
    return self;
}

- (void)callMeAfterInit {

    NSLog(@"%@", self.dictionary);
    // Log output here shows an empty dictionary (valid, but with 0 pairs)
}

@end


@interface ClassB : NSObject <NSCoding>
@property (strong, nonatomic) NSNumber *number;
@property (strong, nonatomic) NSArray *array;
@end

@implementation ClassB

- (void)encodeWithCoder:(NSCoder *)encoder {

    [encoder encodeObject:self.number forKey:@"number"];
    [encoder encodeObject:self.array forKey:@"array"];
}

- (id)initWithCoder:(NSCoder *)decoder {

    self = [super init];
    if (self) {
        _number = [decoder decodeObjectForKey:@"number"];
        _array = [decoder decodeObjectForKey:@"array"];
    }
    return self;
}

@end
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-06-21 01:43:42

您没有显示调用callMeAfterInit的代码,所以这只是一个猜测。

更有可能的是,您不是在与同一个ClassA实例对话。你有没有给[[ClassA alloc] init];打过电话?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17219633

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档