objective-c – 使用常量NSString作为NSUserDefaults的键

objective-c – 使用常量NSString作为NSUserDefaults的键,第1张

概述我使用NSUSerDefaults来存储用户首选项。我记得读某处设置键作为常量是一个好主意 – 我同意。以下代码是我目前有的: [[NSUserDefaults standardUserDefaults] setObject:[NSNumber numberWithInt:polygon.numberOfSides] forKey:@"polygonNumb 我使用NSUSerDefaults来存储用户首选项。我记得读某处设置键作为常量是一个好主意 – 我同意。以下代码是我目前有的:

[[NSUserDefaults standardUserDefaults]        setobject:[NSNumber numberWithInt:polygon.numberOfSIDes]            forKey:@"polygonNumberOfSIDes"];

我试图将此更改为:

@implementation ControllerNsstring const *kpolygonNumberOfSIDes = @"polygonNumberOfSIDes";-(voID)savepolygonInfo {    [[NSUserDefaults standardUserDefaults]            setobject:[NSNumber numberWithInt:polygon.numberOfSIDes]                forKey:kpolygonNumberOfSIDes];}

虽然这样做的工作,它产生“警告:传递参数1 of’objectForKey:’丢弃限定词从指针目标类型”。我希望保持我的代码免于编译器警告。如何解决此警告?

解决方法 您应该使用:

Nsstring * const kpolygonNumberOfSIDes = @"..."; // const pointer

代替:

Nsstring const * kpolygonNumberOfSIDes = @"..."; // pointer to const

第一个是指向Nsstring对象的常量指针,第二个是指向常量Nsstring对象的指针。

这是一个微妙的区别。编译器警告发生,因为setobject:forKey:声明如下:

- (voID)setobject:(ID)value forKey:(Nsstring *)defaultname;

它期望defaultname参数是类型Nsstring *。当你把一个指针传递给一个常量时,你给了它一个不同的东西。

更新:我想指出,这些常量应该定义为静态的,如果他们只是从一个文件中使用。我说这是因为我自己遇到了这个问题:如果你不将它们声明为静态,那么它们将存在于全局命名空间中,并且您将无法在另一个文件中使用具有相同名称的变量。请参阅Constants in Objective-C了解更多信息。通过示例来说明,这是我目前用于我只需要在一个.m文件中使用的键:

static Nsstring * const kSomeLabel = @"...";
总结

以上是内存溢出为你收集整理的objective-c – 使用常量NSString作为NSUserDefaults的键全部内容,希望文章能够帮你解决objective-c – 使用常量NSString作为NSUserDefaults的键所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1049093.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存