[[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的键所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)