0

このカスタムゲッターを使用する場合:

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

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

_queueは常に(null)です。なぜそれが起こるのか分かりません。

しかし、initで同じコードを使用する場合:

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

それは魔法のように機能します。なぜ私はそれを間違っているのですか?

4

1 に答える 1

2

カスタムゲッターを作成するときは、値を返す前に基礎となる 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;
于 2012-11-18T17:05:42.010 に答える