Доступ к массиву изнутри viewDidLoad возвращает индекс 1 за пределами для пустого массива - PullRequest
0 голосов
/ 29 апреля 2018

У меня есть NSMutableArray, в котором хранятся значения из JSON. Я выбираю определенный индекс из массива, чтобы отобразить это значение для кнопки.

Это прекрасно работает, и код, который выполняет эту работу, подготовлен внутри функции.

Когда я вызываю функцию, например, внутри кнопки, она работает нормально и возвращает желаемый результат. Но если я позвоню внутрь viewDidLoad, он вернется:

** Завершение работы приложения из-за необработанного исключения «NSRangeException», причина: «*** - [__ NSArrayM objectAtIndex:]: индекс 1 выходит за границы для пустого массива»

Это код для отображения данных для кнопки, и у меня их десять, а у моего массива десять элементов:

NSString *onemb =[[mobile firstObject]objectForKey:@"package"];
NSString *onedolar =[[mobile firstObject]objectForKey:@"rate"];
nus_dolar.titleLabel.lineBreakMode = NSLineBreakByWordWrapping;
nus_dolar.titleLabel.textAlignment = NSTextAlignmentCenter;
nus_dolar.titleLabel.numberOfLines = 2;
nus_dolar.titleLabel.font = [UIFont fontWithName:@"Helvetica-Bold" size:20];
[nus_dolar setTitle:[NSString stringWithFormat:@"%@\n%@", onedolar , onemb ] forState: UIControlStateNormal];

Это моя вызывающая функция:

[self loadingHomePageData];

Ответы [ 2 ]

0 голосов
/ 29 апреля 2018

Если вы получаете ваш JSON с сервера, вы можете использовать это

NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
NSURL *url = [NSURL URLWithString:@"anUrl"];

[session dataTaskWithURL:url completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
    // your JSON parsing code here
}];
0 голосов
/ 29 апреля 2018

Функция, которая вызывает API для получения json с сервера: асинхронная , тогда для получения ответа требуется мало времени, и он не получит его в течение жизненного цикла viewDidLoad .

Вы можете использовать @escaping completionHandler (в быстром - вы должны преобразовать его в target-c), чтобы смоделировать синхронизированный метод для получения ответа. и тогда вы можете использовать его в viewDidLoad.

см. Как работает обработчик завершения в iOS?

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