Ще се опитам да дам възможно най-много подробности в тази публикация, защото е много важно да изпълня тази задача и не знам защо получавам тези странни резултати. И така, ето го.
Имам 5 контролера за изглед/.xib файла. Имам също appdelegate и LocationManager singleton клас, предназначен да предоставя на всеки .h/.m файл актуализации на местоположението. View controller 1, известен като WelcomeView, е делегатът за актуализации на местоположението. Така че в него има метода didUpdateLocations. Следи човек да влезе в определена зона. Когато се влезе в тази конкретна зона, тя казва на човека да отиде в друга зона, за да получи нещо като награда. didUpdateLocations следи ВСИЧКИ движения, включително гледане дали лицето влиза както в зона 1, така и в зона 2. Ако лицето успешно влезе в зона 1, трябва да превключи изгледите към TransitionViewController за 3 секунди, след което да превключи към TimerViewController. Ето кода, който използвах за превключване:
self.transitionView = [[TransitionViewController alloc] initWithNibName:@"TransitionViewController" bundle:nil];
[self.view addSubview: self.transitionView.view];
след това в контролера за преходен изглед го карам да заспива за 3 секунди и след това превключвам към timerviewcontroller, като това:
sleep(3);
self.timerView = [[TimerViewController alloc] initWithNibName:@"TimerViewController" bundle:nil];
[self.view addSubview:self.timerView.view];
Когато всъщност влязох в зоната и всичко това трябваше да се случи, първоначално работи като чар. Както се оказва, работи само когато телефонът е включен в Mac и работи от Xcode. Сега стигнах дотам, че отнема само 45 секунди - 1 минута, за да превключите към преход, а след това, когато сте в преход, са необходими допълнителни около 20 секунди, преди да превключите към таймер. Опитах различни неща като поставяне на двете команди в основната нишка, така:
sleep(3);
[[NSOperationQueue mainQueue] addOperationWithBlock:^ {
NSLog(@"Finished sleeping; switching to timer now.\n");
self.timerView = [[TimerViewController alloc] initWithNibName:@"TimerViewController" bundle:nil];
[self.view addSubview:self.timerView.view];
}];
или поставяне на прехода към таймер във фонова нишка, като това:
[self performSelectorInBackground:@selector(transitionToTimer) withObject:nil];
Загубен съм. Не знам защо се случва това и тази работа трябваше да бъде свършена миналата седмица. Някакви предложения за мен? Някой?
РЕДАКТИРАНЕ
Това е най-странната част от него: Ако стартирам приложението, докато вече съм в зона 1, то работи безупречно. Приложението прави точно това, което трябва. Когато вляза в горещата точка, тя се срива или отнема цяла вечност, за да превключите изгледите. Така че, ако приложението работи на телефона ОТ Xcode ИЛИ вече съм в горещата точка, когато стартира, то работи добре. Ако стартирам приложението независимо от xcode и вляза в горещата точка, то се срива или отнема над 60 секунди за превключване на изгледи. Той осъзнава, че трябва да превключи, но не го прави за 60+ секунди.
dispatch_after()
- person Abizern   schedule 11.09.2013