NetworkActivityIndicator لا يعمل بنفس الشيء على iPhone و Simulator؟
-
26-09-2019 - |
سؤال
أنا أستخدم NetworkActivityIndicator لإظهار أن تطبيقي يقوم ببعض الأعمال. عندما أقوم بتشغيل التطبيق في المحاكاة ، فإنه يظهر الطريقة التي أريدها - تدور بشكل أساسي طوال الوقت حتى تقوم علامة التبويب المحددة بتحميل البيانات من الخادم - ولكن عندما أضع التطبيق على هاتفي ، أحصل فقط الدوار قبل أن يختفي. عادة ما يدور فقط قبل ظهور العرض على الشاشة.
أفكار؟
تحرير: قد يكون للمشكلة علاقة بحقيقة أنني أستخدم tabbar ... في جهاز المحاكاة ، سيتم تدوير ActivityIndicator على الشاشة/علامة التبويب 1 أثناء تحميل الشاشة/علامة التبويب 2. على الهاتف ، أرى فقط ActivityIndicator لثانية مقسمة بعد الشاشة 2 تظهر أخيرًا.
-(void)viewDidLoad {
// call to spinTheSpinner
[NSThread detachNewThreadSelector:@selector(spinTheSpinner) toTarget:self withObject:nil];
// method to Get the Data from the Server
[self getDataFromServer];
}
-(void)spinTheSpinner {
NSLog(@"Spin The Spinner");
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
[self performSelectorOnMainThread:@selector(doneSpinning) withObject:nil waitUntilDone:YES];
[pool release];
}
-(void)doneSpinning {
NSLog(@"done spinning");
[UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
}
-(void)getDataFromServer {
// does a bunch of stuff to retrieve and display data
}
المحلول
تقوم بتشغيل الدوار هنا ...
[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
لكن على الفور تقوم بإيقاف تشغيله ...
[self performSelectorOnMainThread:@selector(doneSpinning) …];
بالطبع لن تظهر. أنا مندهش من أنه يظهر في المحاكاة.
ال -doneSpinning
يجب استدعاء الطريقة بعد -getDataFromServer
تم القيام به ، أو فقط افعل
UIApplication* app = [UIApplication sharedApplication];
app.networkActivityIndicatorVisible = YES;
[self getDataFromServer]; // assumes it is blocking.
app.networkActivityIndicatorVisible = NO;