Objective-C: нет объектов в массиве после их добавления. Вне области видимости! - PullRequest
0 голосов
/ 18 ноября 2011

У меня есть NSMutableArray в объекте.В объектном методе я делаю что-то вроде этого:

/* ... */
[[LRResty client] get:connectURL withBlock:^(LRRestyResponse *r) {
    SBJsonParser *jsonParser = [SBJsonParser new];
    NSDictionary *jsonResponse = [jsonParser objectWithString:[r asString]];
    NSDictionary *permittedBases= [jsonResponse objectForKey:@"permittedBases"];
    Database *database = [[Database alloc] init];

    for (id key in permittedBases) {
        /* ... */
        [workingDatabases addObject:database];
    }
}];

return workingDatabases;    

В обратной строке нет объектов в моем массиве (больше).Я осознаю тот факт, что объекты «базы данных» выходят из области видимости.Но я сохраняю их в массиве.

Наблюдаю ли я за чем-то?

Если это поможет, вот файл заголовка:

@class Database;

@interface CommunicationHelper : NSObject {
    NSMutableArray *workingDatabases;
}


// The function where the problem appears:
- (NSMutableArray *)getDatabasesForWebsite:(Website *)websiteIn; 

@property(nonatomic,copy) NSMutableArray *workingDatabases;


@end

Ответы [ 3 ]

1 голос
/ 18 ноября 2011

просто выделите ваши рабочие базы данных (изменяемый массив) где-нибудь перед использованием этого массива.

Как только вы выделите его, он будет работать нормально.

1 голос
/ 23 декабря 2011

Я использовал инфраструктуру LRResty для доступа к веб-сервису RESTful. В любом случае, это было странно, поэтому я перешел на более функциональный фреймворк под названием «ASIHTTP». Я бы порекомендовал всем, кто хочет использовать сервисы RESTful (и не только) на iOS

1 голос
/ 18 ноября 2011

Я предполагаю, что это потому, что [LRResty client] get: является асинхронным.Блок вызывается, когда соединение завершено, то есть после вызова для возврата.

//Called first
[[LRResty client] get:connectURL

//Called second
return workingDatabases;

//Called later when the connection is finished
SBJsonParser *jsonParser = [SBJsonParser new];
    NSDictionary *jsonResponse = [jsonParser objectWithString:[r asString]];
    NSDictionary *permittedBases= [jsonResponse objectForKey:@"permittedBases"];
    Database *database = [[Database alloc] init];

    for (id key in permittedBases) {
        /* ... */
        [workingDatabases addObject:database];
    }

Редактировать

У Ajeet также есть действительная точка, убедитесь, что ваш массив инициализирован.

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