编码一个 int 或 NSInteger 用于状态恢复
Posted
技术标签:
【中文标题】编码一个 int 或 NSInteger 用于状态恢复【英文标题】:encoding either an int or NSInteger for state restoration 【发布时间】:2014-11-07 20:21:56 【问题描述】:我正在我的应用中实现状态恢复。窗口恢复得很好,所以现在我正在尝试对视图控制器的某些属性进行编码,这些属性与用于保留视图控制器视图状态的索引相关。我有:
@property (nonatomic) int index; //prefer to use an int
@property (nonatomic) NSInteger *testint; //I tried with NSInteger as well and got the same error code
我将以下内容添加到我的视图控制器 .m 文件中(也尝试使用 NSInteger,但我正在粘贴 int 代码)
- (void)encodeRestorableStateWithCoder:(NSCoder *)coder
[coder encodeObject:self.index forKey:@"self.index"];
[super encodeRestorableStateWithCoder:coder];
- (void)decodeRestorableStateWithCoder:(NSCoder *)coder
self.index = [coder decodeObjectForKey:@"self.index"];
[super decodeRestorableStateWithCoder:coder];
无论我使用 int 还是 NSInteger,我一输入这些信息就会收到相同的错误消息(无法构建)
对于
[coder encodeObject:self.index forKey:@"self.index"];
错误消息是“不兼容的整数到指针转换将'int'发送到类型id的参数。”
对于
self.index = [coder decodeObjectForKey:@"self.index"];
错误是“从'id'分配给'int'的整数转换指针不兼容”
显然,这些错误是其中之一。但是必须有一种方法来编码一个 int,即使没有,为什么即使我使用 NSInteger test int 并将上述所有内容替换为 self.testint 而不是 self.index,我也会得到这些错误。在后一种情况下,我使用的是指针。
所以我的问题是如何编码 int(首选)或 NSInteger?谢谢你。
【问题讨论】:
您是否考虑查看相关pieces of the documentation 的either? 感谢您的链接。我还没有找到关于编码 c 数据类型的那个。很有帮助。 【参考方案1】:你真的想使用整数'*testint'的指针吗?我认为它是'testint'。 以下内容可以解决您的错误。
@property (nonatomic) int index; //prefer to use an int
@property (nonatomic) NSInteger testint; //I tried with NSInteger as well and got the same error code
- (void)encodeRestorableStateWithCoder:(NSCoder *)coder
[coder encodeInt:self.index forKey:@"self.index"];
[super encodeRestorableStateWithCoder:coder];
- (void)decodeRestorableStateWithCoder:(NSCoder *)coder
self.index = [coder decodeIntForKey:@"self.index"];
[super decodeRestorableStateWithCoder:coder];
【讨论】:
所以实际上您需要从上面建议的代码中删除 [super] 以进行编码和解码。如果您保留 [super... 命令,整数不会解码为正确的值。我不知道为什么(在文档中没有找到原因,但是作为其他新手的负责人。以上是关于编码一个 int 或 NSInteger 用于状态恢复的主要内容,如果未能解决你的问题,请参考以下文章
ios - 从整数(int 或 NSInteger)到 UICollectionView 的 NSIndexPath*
NSUInteger vs NSInteger,int vs unsigned,以及类似情况
不兼容的整数到指针的转换将“NSInteger”(又名“int”)发送到“NSInteger *”(又名“int *”)类型的参数