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 的自定义设置器的主要内容,如果未能解决你的问题,请参考以下文章