Доступ к NSUInteger собственности

У меня есть некоторые проблемы с доступом к свойству NSUInteger в моем коде, который выглядит так:

MyController.h

@interface MyController : UIViewController
  @property (retain, nonatomic) NSArray *updatesArray;

  @property (nonatomic) NSUInteger madeUpdatesCounter;
  @property (nonatomic) NSUInteger allUpdatesCounter;
@end

MyController.m

@implementation MyController

  @synthesize updatesArray;

  @synthesize madeUpdatesCounter;
  @synthesize allUpdatesCounter;

- (void)viewDidLoad
{
    ....
    madeUpdatesCounter = 0;
    allUpdatesCounter = [updatesArray count];

    ....

    // Register for progress notifications    
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(makeProgressChange)
                                                 name:@"MadeOneUpdateNotification"
                                               object:nil];
}

- (void)makeProgressChange
{
     madeUpdatesCounter++;
     NSLog(@"Update progress: %d/%d", madeUpdatesCounter, allUpdatesCounter);
}
@end

Я обрабатываю свои обновления как NSInvocationOperation, добавляя в NSOperationQueue. В конце одного действия по обновлению я отправляю уведомление:

[[NSNotificationCenter defaultCenter] postNotificationName:@"MadeOneUpdateNotification" object:nil];

После выполнения вышеуказанного кода, получение уведомлений выполняется только один раз, и в логах я вижу что-то вроде этого:

Обновление прогресса: 1/3

Когда я меняю строку:

allUpdatesCounter = [updatesArray count];

в

allUpdatesCounter = 3;

тогда все работает нормально, и я вижу в журналах: прогресс обновления: 1/3 прогресс обновления: 2/3 прогресс обновления: 3/3

Переменная updatedArray инициализируется перед загрузкой представления. Делается так:

MyController *doUpdatesVC = [self.storyboard instantiateViewControllerWithIdentifier:@"MyController"];
doUpdatesVC.updatesArray = updatesArray;
[self presentViewController:doUpdatesVC animated:YES completion:nil];

Есть ли у вас какие-либо советы или подсказки, что я делаю неправильно в моем коде?

1 ответ

Решение

ОК, я нашел причину своих проблем. Приложения заблокированы путем доступа к той же переменной с помощью операций, запущенных из очереди. Когда я изменил логику своего кода, все стало работать правильно.