#objective-c #ios #memory-management
#objective-c #iOS #управление памятью
Вопрос:
У меня есть контроллер UITableView, содержащий изображения. У меня также есть кнопка обновления, чтобы повторно получить данные с сервера в формате JSON и снова заполнить UITableView.
Однако я сталкиваюсь с проблемой, из-за которой приложение иногда выходит из строя, когда я нажимаю на кнопку обновления (неустойчивое поведение).
Скриншот моего сбоя выглядит следующим образом
Отсюда кажется, что ошибка возникает при синтезе свойства, и я предполагаю, что ошибка возникает при попытке доступа к свойству aConnection
Я проверил поток на левой панели, и следующий снимок экрана, похоже, указывает на то, что сбой произошел где-то, когда я попытался снова установить соединение.
Я не уверен, что разместил здесь достаточно информации, но буду признателен за любые советы о том, как мне поступить
Ответ №1:
Попробуйте использовать этот метод.
- (void)getData
{
NSAutoreleasePool *pool = [ [ NSAutoreleasePool alloc ] init ];
NSString *urlGen = [[NSString alloc] initWithFormat:@"http://myurlforjson"];
NSLog(@"%@",urlGen);
NSURL *url = [NSURL URLWithString:urlGen]; // Modify this to match your url.
NSString *jsonreturn = [[NSString alloc] initWithContentsOfURL:url]; // Pulls the URL
NSData *jsonData = [jsonreturn dataUsingEncoding:NSUTF32BigEndianStringEncoding]; NSError *error = nil;
// I am using specific JSON Libraries to parse json data
NSDictionary * dict = [[CJSONDeserializer deserializer] deserializeAsDictionary:jsonData error:amp;error];
if (dict)
{
self.storageDictionary = [dict objectForKey:@"JSONItemNAME"];
[self parseNumberofStores:self.listData];
[self.listData retain];
}
[urlGen release];
[jsonreturn release];
[self.table reloadData];
if ([self.listData count] <= 0 )
{
UIAlertView *al = [[UIAlertView alloc] initWithTitle:@"Oops !" message:@"Sorry ! No Items Found" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
[al show];
[al release];
//[[self navigationController] popViewControllerAnimated:YES];
}
if ([activity isAnimating]) {
[activity stopAnimating];
}
[tableview reloadData];
[pool release];
}
Надеюсь, это решит вашу проблему.
Возможно, вам потребуется вызвать этот метод из какого-либо события click или load попробуйте использовать это
[NSThread detachNewThreadSelector: @selector(getData) toTarget:self withObject:nil];