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

Objective c 需要整数值而不是内存地址,同时避免无效接收器类型编译器警告,objective-c,int,compiler-warnings,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 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"];
}
我得到了编译器警告
无效的接收器类型“int”
,因为我在
int
上调用了
intValue
,但除非我这样做,否则我似乎无法得到整数值,并且总是以内存地址(即98765432)而不是9结束,这会破坏UILabel显示[
retainHistory
]和UISlider[
daysToRetainHistory
]值


如何避免编译器警告,同时仍在标签中获取整数值和设置UISlider值所需的浮点值?

这是因为您正在将内存地址强制转换为int,而int值不起作用。只需使用NSUserDefaults提供的方法即可:

+ (NSInteger)daysToRetainHistory
{
  return [[NSUserDefaults standardUserDefaults] integerForKey:@"CaseBaseDaysToRetainHistory"];
}
然后直接使用它:

NSInteger days = [SettingsUtils daysToRetainHistory];
您还应使用相同的方法存储天数:

[[NSUserDefaults standardUserDefaults] setInteger:days forKey:@"CaseBaseDaysToRetainHistory"];
尽管如果您设置了NSNumber对象,并且它实际上包含一个整数,这也可以正常工作