Что вызывает нулевой объект у объектов [0], когда доступ к объекту синхронизирован? - PullRequest
3 голосов
/ 05 августа 2011

Мы получаем следующее исключение при вызове [self.sessions allValues]. Везде, где мы используем сеансы, мы также синхронизируемся с мьютексом объекта блокировки. Что вызвало бы это исключение?

[NSArray initWithObjects:count:]: attempt to insert nil object at objects[0]

0   CoreFoundation 0x334ff987 __exceptionPreprocess + 114
1   libobjc.A.dylib                     0x331b449d objc_exception_throw + 24
2   CoreFoundation                      0x33487bf7 -[__NSPlaceholderArray initWithObjects:count:] + 270
3   CoreFoundation                      0x3349730d +[NSArray arrayWithObjects:count:] + 32
4   CoreFoundation                      0x334a16e7 -[NSDictionary allValues] + 282

@synchronized (mutex) {
    if (!self.sessions) {
        return [NSArray array];
    }

    NSMutableArray* activeSessions = [[NSMutableArray alloc] init];


    for (id<AccountSession> session in [self.sessions allValues]) {
        if (session) {
            [activeSessions addObject:session]; 
        }
    }

    return [activeSessions autorelease];
}

1 Ответ

2 голосов
/ 05 августа 2011

Одно предположение:

Ваш словарь сеанса содержит ключ / значения (= экземпляры сеанса).При добавлении их в словарь ключи и значения сохраняются.Если существует проблема с памятью при добавлении экземпляра сеанса в словарь - например, он случайно переиздается - вы можете получить недопустимый экземпляр сеанса, который в конечном итоге вызывает исключение.Поэтому вам следует проверить управление памятью для объектов сеанса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...