Показ индикатора активности при использовании потока Показывает эту ошибку в gdb? - PullRequest
0 голосов
/ 10 августа 2009

Я использую это для метода didselectrow от uitableviewcell

[NSThread detachNewThreadSelector:@selector(showMyWaitView) toTarget:self withObject:nil];

работает нормально, но показывает ошибку в GDB, как это

2009-08-10 12: 45: 01.313 FlashCards [1209: 6307] * _NSAutoreleaseNoPool (): объект 0x458200 класса UIView автоматически освобожден без пула на месте - только утечка Стек: (0x907d7adf 0x906e41f2 0x29a6 0x906eabad 0x906ea754 0x93e2d6f5 0x93e2d5b2) 2009-08-10 12: 45: 01.314 FlashCards [1209: 6307] * _NSAutoreleaseNoPool (): объект 0x2a0e8 класса NSCFString автоматически освобожден без пула на месте - только утечка Стек: (0x907d7adf 0x906e41f2 0x30ad10b0 0x30ad12e6 0x29c5 0x906eabad 0x906ea754 0x93e2d6f5 0x93e2d5b2)

Я также пробовал таймер, но это не сработало

мой код таймера это

MyTimer = [NSTimer timerWithTimeInterval: 0,01 цель: автоматический выбор: @selector (showMyWaitView) userInfo: nil повторов: НЕТ]; [[NSRunLoop mainRunLoop] addTimer: MyTimer forMode: NSDefaultRunLoopMode];

я тоже пробовал это

MyTimer = [NSTimer scheduledTimerWithTimeInterval:0.0001 target:self selector:@selector(showMyWaitView) userInfo:nil repeats:NO]; 

[NSThread sleepForTimeInterval: 0,03];

и это мой метод showMyWaitView

-(void)showMyWaitView
{
[self.view addSubview:MyWaitViewObj.view];
}

вот мой метод выбора

  if(MyWaitViewObj==nil)
{
    MyWaitViewObj = [[MyWaitViewController alloc] initWithNibName:@"MyWaitView" bundle:nil];
}

//MyTimer = [NSTimer scheduledTimerWithTimeInterval:0.0001 target:self selector:@selector(showMyWaitView) userInfo:nil repeats:NO]; 
MyTimer = [NSTimer timerWithTimeInterval:0.01 target:self selector:@selector(showMyWaitView) userInfo:nil repeats:NO];
[[NSRunLoop mainRunLoop] addTimer:MyTimer forMode: NSDefaultRunLoopMode];
[NSThread detachNewThreadSelector:@selector(showMyWaitView) toTarget:self withObject:nil];
//[NSThread sleepForTimeInterval:0.03];

[indexTableView deselectRowAtIndexPath:indexPath animated:YES];
categoryId = [[listOfCategoryId objectAtIndex:indexPath.section] intValue];
categoryType=[[listOfCategoryType objectAtIndex:indexPath.section] intValue];
[self getFlashCard:categoryId];
flashcardid = [[flashCardsId objectAtIndex:indexPath.row] intValue];
//NSLog(@"%s %d %s", __FILE__, __LINE__, __PRETTY_FUNCTION__, __FUNCTION__);
    if(MyPageViewControllerObj==nil)
    {
        MyPageViewController *vController= [[MyPageViewController alloc] initWithNibName:@"MyPageView" bundle:[NSBundle mainBundle]];
        self.MyPageViewControllerObj=vController;
        [vController release];
    }
  //

    MyPageViewControllerObj.sessionid=sessionid;
    MyPageViewControllerObj.categoryID = categoryId;
    MyPageViewControllerObj.flashcardIdforcount = flashcardid;
    MyPageViewControllerObj.categoryType=categoryType;
    MyPageViewControllerObj.indexViewControllerobj=self;
    [self.navigationController pushViewController:MyPageViewControllerObj animated:YES];
    [MyPageViewControllerObj refreshMyPageView];
    //[MyPageViewControllerObj release];
    NSLog(@"My MySlidingController View Ka retain Count=%d",[MyPageViewControllerObj retainCount]);
[MyWaitViewObj.view removeFromSuperview];

как мне показать индикатор активности с помощью таймера, пожалуйста, помогите мне или скажите, будет ли эта ошибка GDB причиной сбоя приложения

Ответы [ 2 ]

1 голос
/ 10 августа 2009

Все обновления пользовательского интерфейса должны выполняться в главном потоке.

1 голос
/ 10 августа 2009

Если вы настраиваете поток, вам нужно настроить цикл выполнения и создать NSAutoreleasePool также для этого потока, который освобождается при выходе из потока. Проблема в том, что вы не делаете ни того, ни другого, когда запускаете свой селектор. Ваш showMyWait должен настроить пул релизов из NSThread документации

Для сборщиков мусора приложения, метод aSelector является ответственность за создание Авто-релиз бассейн для новичков отдельная нить и освобождение этого пула прежде чем он выйдет. Сборщиком мусора приложениям не нужно создавать Авто-релиз бассейн.

...