菜鸟教程小白 发表于 2022-12-12 09:58:08

ios - 如何判断 NSUserDefaults 中存储了什么样的数据


                                            <p><p>我目前在 <code>NSUserDefaults</code> 中存储一个 <code>NSUInteger</code> 来保存数据,但我需要转到一个 <code>NSObject</code> 即 <code> NSCoding</code> 兼容,并将存储为 <code>NSData</code>。有没有办法确定我是在我的 key 中存储一个 int 还是一个对象,以便我可以容纳已经或没有从一种持久性类型迁移到另一种持久性类型的用户?我知道 <code>objectForKey</code> 返回一个 id,所以这够好吗?</p>

<pre><code>- (id) returnStuff {
NSData *data = ;
if() {
    // then it must be an archived object
    return (desiredObjectClass*);
}
else {
    NSUInteger returnInt = ;
    return ;
}
</code></pre></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>您可以使用 <code>isKindOfClass:</code> 来特别对待 <code>NSData</code>,就像您所做的那样,除了我不会费心拆箱整数来重新装箱。以下方法处理并返回任何类型。</p>

<p>注意:没有必要强制转换未归档的数据,因为编译器不会关心您返回 <code>id</code>。</p>

<pre><code>- (id)stuffForKey:(NSString *)key {
    id value = [ objectForKey:key];
    if (]) {
      // then it must be an archived object
      NSData *dataValue = (NSData *)value;
      return ;
    }
    return value;
}
</code></pre></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 如何判断 NSUserDefaults 中存储了什么样的数据,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/34341310/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/34341310/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 如何判断 NSUserDefaults 中存储了什么样的数据