gpt4 book ai didi

xcode - 存档的 NSData,isEqualToData : and Empty Strings

转载 作者:行者123 更新时间:2023-12-03 17:57:46 26 4
gpt4 key购买 nike

我有一个自定义对象,其中包含几个 NSString 对象、一些整数和一些 bool 值。我正在使用 NSKeyedArchiver 将对象的副本存档到 NSData 对象中。

用户然后对连接到 IB 接口(interface)的对象变量进行更改。

进行更改后,对象的新版本将存档到第二个 NSData 对象中。

这两个对象的比较使用

[myNSData1 isEqualToData: myNSData2];

在大多数情况下它工作得很好,但有一种非常令人不安的情况:

假设该对象有一个初始化如下的变量:

NSString *myString = @"";

将对象存档到 myNSData1 后,我们调用以下命令:

myString = [myNSTextField stringValue];

将 myString 记录到控制台显示 myString 的值仍然是

@""

因此值没有改变。

我们现在将该对象存档到 myNSData2 中。

但是,执行上面的比较语句后,它现在返回 FALSE。 如果 @""的原始赋值被使用 stringValue 的文本字段中包含的 @""替换,则返回 FALSE。

这是为什么?

最佳答案

看看这些字符串的类型(NSLog([myString className]) 应该有效),因为 NSStringclass cluster 。我猜您会发现其中一个字符串是 NSCFString,另一个是 NSCFConstantString。归档器对类型信息进行编码,因此如果类型不同,NSData也会不同。

我不会依赖 NSData 对象是相同的。如果您想比较两者,最好将它们解压并使用 isEqual:。这样,您就可以完全控制。

关于xcode - 存档的 NSData,isEqualToData : and Empty Strings,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10712859/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com