iPhone uygulamamda NSAssert
kullanmaya çalışıyorum, bu nedenle beklenmedik bir durum oluşursa, uygulama başarısız olur ve kilitlenme günlüğünde anlamlı bir mesajla kilitlenir.1 NSAssert kullaniciları thread içinde kullanılabilir
Başarısız olan ve yürütmeyi durdurduğu varsayılan olarak NSInternalInconsistencyException
yükseldiği için başarısız olan NSAssert
ana iş parçacığı üzerinde çalışıyorsa bu iyi çalışır. Ama ben de arka plan iş parçacığı içinde işlem yapıyorum, bu durumda NSAssert
sadece iş parçacığı iptal eder, ancak programlama çalışmaya devam eder.
- (void)main {
@try {
int x = 14;
...
NSAssert1(x > 20, @"x should be greater than 20, was %d", x);
...
}
@catch (NSException *e) {
[e performSelectorOnMainThread:@selector(raise) withObject:nil waitUntilDone:YES];
}
}
daha iyi bir yolu var mı:
Bulunduğum çözeltisi (, NSOperation
'ın main
yöntem bu durumda) yakalamak ve ana iş parçacığı istisna rethrow etmektir? Belki özel bir NSAssertionHandler kullanıyor musunuz?
Ben sadece statik bir ek açıklama ile C'ler assert
kullanabilirsiniz biliyorum:
assert(x > 20 && "x should be greater than 20");
Ama bu beni x
gerçek başarısız değerinin ne göstermesine izin vermez.
Aynı sorunu yaşıyorum ama önerilen çözüm benim için çalışmayacak. NSAssert tetikleniyor, iş parçacığı ölüyor, ancak uygulama çalışmaya devam ediyor. Cocos2D motorunu kullanıyorum. Herkes daha eksiksiz bir çözüm sağlayabilir mi? –