У меня есть цикл вызова функции, но я хочу называть его, если появляется мой вид, и не вызывать его, когда вид исчезает.Остановить NSThread на iOS
Функция Loop:
-(void)updateArray
{
while (1)
{
NSLog(@"IN LOOP");
[NSThread sleepForTimeInterval:2.0];
if([FileSizeArray count] >0 || [FileCurrentSizeArray count] >0)
{
[FileSizeArray removeObjectsInRange:NSMakeRange(1, FileSizeArray.count-1)];
[FileCurrentSizeArray removeObjectsInRange:NSMakeRange(1, FileSizeArray.count-1)];
}
[FileNameArray removeAllObjects];
[UserNameArray removeAllObjects];
...
}
И ViewWillAppear()
timer= [NSTimer scheduledTimerWithTimeInterval: 2.0
target: self
selector:@selector(updateArray:)
userInfo: nil repeats:NO];
И DidDisAppear()
[timer invalidate];
timer = nil;
Но это не работает, она до сих пор называют и мое приложение имеет сбой.
Может ли кто-нибудь мне помочь? Заранее спасибо
Вы можете добавить сообщение об ошибке вы получили, когда приложение разбился, и на какой строке его разбился? Кроме того, 'scheduleTimerWithTimeInterval ... 'расписывает таймер на текущем потоке (который является основным, поскольку он вызывается из' viewWillAppear'), и вы не должны вызывать '[NSThread sleep ...]' в основном потоке. –
, потому что у вашего метода нет параметров и, хотя вы его передаете, просто измените имя метода по таймеру (updateArray), все будет хорошо. –