开发者社区> 问答> 正文

自定义获取总是得到空值

如果我这样获取值:

-(NSMutableArray *)queue
{
    if (_queue == nil)
    {
        if ([[NSFileManager defaultManager] fileExistsAtPath:kOfflineQueueFilePath]) {
            return [NSKeyedUnarchiver unarchiveObjectWithFile:kOfflineQueueFilePath];

            //[NSKeyedUnarchiver unarchiveObjectWithFile:kOfflineQueueFilePath];
        }else{
            return [[NSMutableArray alloc] init];
        }
    }
}

_queue值就为零,原因也不清楚。

但是如果在init中使用同样的代码:

 if ([[NSFileManager defaultManager] fileExistsAtPath:kOfflineQueueFilePath]) {            
        sharedQueue.queue =  [NSKeyedUnarchiver unarchiveObjectWithFile:kOfflineQueueFilePath];
    }else{
        sharedQueue.queue = [[NSMutableArray alloc] init];
    }

就可以正常运行,为什么这样?

展开
收起
爵霸 2016-05-27 11:15:28 1636 0
1 条回答
写回答
取消 提交回答
  • 创建自定义getter要在返回值前设置底层ivar:

    if ([[NSFileManager defaultManager] fileExistsAtPath:kOfflineQueueFilePath]) {
        return [NSKeyedUnarchiver unarchiveObjectWithFile:kOfflineQueueFilePath];
    
        //[NSKeyedUnarchiver unarchiveObjectWithFile:kOfflineQueueFilePath];
    }else{
        return [[NSMutableArray alloc] init];
    }

    改为:

    if ([[NSFileManager defaultManager] fileExistsAtPath:kOfflineQueueFilePath]) {
        _queue = [NSKeyedUnarchiver unarchiveObjectWithFile:kOfflineQueueFilePath];
    
        //[NSKeyedUnarchiver unarchiveObjectWithFile:kOfflineQueueFilePath];
    }else{
        _queue =  [[NSMutableArray alloc] init];
    }
    return _queue;

    就可以了

    2019-07-17 19:17:27
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载


http://www.vxiaotou.com