double 的自定义设置器

Posted

技术标签:

【中文标题】double 的自定义设置器【英文标题】:custom setter for double 【发布时间】:2012-03-28 05:51:27 【问题描述】:

我有以下属性:

@property (nonatomic, assign) double lastSynced;

and here's my custom setter:

-(void)setLastSynced:(double)newLastSynced

    if (lastSynced != newLastSynced)
        lastSynced = newLastSynced;
        [[NSUserDefaults standardUserDefaults] setDouble:lastSynced forKey:kSettingLastSyncedKey];
        [[NSUserDefaults standardUserDefaults] synchronize];
    

我不确定为什么在设置 lastSynced 时没有调用我的自定义设置器?我把它合成为

@synthesized lastSynced。

【问题讨论】:

尝试删除@synthesize 并添加getter 方法(-(double)getLastSynced return lastSynced; @Novarg:那么就不会有 ivar。即使在合成时,仅替换一个或另一个(或两者!)访问器方法也是有效的。 【参考方案1】:

您是否尝试过明确声明您的 setter?

@property (nonatomic, assign, setter=setLastSynched:) double lastSynced;

【讨论】:

【参考方案2】:

在合成中你在创建自定义设置器时没有写 lastSynced = _lastSynced 是非常糟糕的,因为在设置器内部你试图调用你的设置器。 尝试:

@synthesize lastSynced = _lastSynced

-(void)setLastSynced:(double)newLastSynced

         if (_lastSynced != newLastSynced)
    
            _lastSynced = newLastSynced;
            [[NSUserDefaults standardUserDefaults] setDouble:_lastSynced  forKey:kSettingLastSyncedKey];
            [[NSUserDefaults standardUserDefaults] synchronize];
    

【讨论】:

setter 内部没有使用。你是从哪里得到这个想法的?

以上是关于double 的自定义设置器的主要内容,如果未能解决你的问题,请参考以下文章

配置 WSO2 API 管理器自定义身份验证器和声明

Google 跟踪代码管理器自定义变量返回未定义

Xamarin Forms Shell 如何使用自定义渲染器自定义选项卡

在我的自定义函数中返回 double.NaN:这是一个好习惯吗?

flowable设计器自定义自己的人员选择器

joomla 菜单管理器自定义组件