سؤال

أنا أستخدم 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;
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top