【问题标题】:custom setter for doubledouble 的自定义设置器
【发布时间】: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。即使在合成时,仅替换一个或另一个(或两者!)访问器方法也是有效的。

标签: iphone objective-c ios ipad core-data


【解决方案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 内部没有使用。你是从哪里得到这个想法的?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-10
    • 1970-01-01
    • 2014-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多