需要整数值而非内存地址,同时避免无效的接收器类型编译器警告

时间:2011-01-06 05:47:00

标签: objective-c int compiler-warnings

我有以下代码;

int days = [[SettingsUtils daysToRetainHistory] intValue];
[retainHistory setText:[NSString stringWithFormat:@"Days to retain History: %d", days]];
[daysToRetainHistory setValue:days animated:NO];

其中[SettingsUtils daysToRetainHistory]如下;

+ (int) daysToRetainHistory {
    return (int)[[NSUserDefaults standardUserDefaults] objectForKey:@"CaseBaseDaysToRetainHistory"];
}

我收到编译器警告Invalid receiver type 'int',因为我在intValue上调用了int,但除非我这样做,否则我似乎无法获得整数值并始终以内存地址,即98765432而不是9,它破坏了UILabel显示[retainHistory]和UISlider [daysToRetainHistory]值。

如何避免编译器警告并仍然在标签中获取我的整数值以及设置UISlider值所需的浮点值?

1 个答案:

答案 0 :(得分:2)

这是因为你正在将一个内存地址转换为一个int值无效的int。而只需使用您想要的NSUserDefaults方法:

+ (NSInteger)daysToRetainHistory
{
  return [[NSUserDefaults standardUserDefaults] integerForKey:@"CaseBaseDaysToRetainHistory"];
}

然后直接使用它:

NSInteger days = [SettingsUtils daysToRetainHistory];

您还应该使用相同的方法存储您的日期:

[[NSUserDefaults standardUserDefaults] setInteger:days forKey:@"CaseBaseDaysToRetainHistory"];

虽然如果设置NSNumber对象并且它实际上确实包含一个整数,那么它也可以正常工作。