Vì vậy, trong lớp App Đại biểu - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
sẽ chỉ được gọi là ở lần đầu tiên bạn nhập app.Then nó sẽ gọi - (void)applicationDidBecomeActive:(UIApplication *)application
.
Nếu iphone iOS của bạn là 4.0 trở lên, khi người dùng nhấp vào nút trang chủ, trước tiên nó sẽ gọi - (void)applicationWillResignActive:(UIApplication *)application
, sau đó - (void)applicationDidEnterBackground:(UIApplication *)application
.
Sau đó, ứng dụng sẽ chạy ở chế độ nền cho đến khi người dùng xóa nó. Khi người dùng nhập lại ứng dụng, trước tiên nó sẽ gọi - (void)applicationWillEnterForeground:(UIApplication *)application
, sau đó - (void)applicationDidBecomeActive:(UIApplication *)application
.
Vì vậy, có liên quan đến câu hỏi của bạn, bạn nên gọi applicationWillEnterForeground:
hoặc applicationDidBecomeActive:
để tải lại dữ liệu của bạn. Mặc dù trong nhận xét của xcode về các phương pháp này, Apple đề xuất sử dụng applicationDidBecomeActive:
để khởi động lại các tác vụ bị tạm dừng và/hoặc cập nhật giao diện người dùng; trong khi ở trong số applicationWillEnterForeground:
, bạn có thể hoàn tác các thay đổi bạn đã thực hiện khi nhập nền.
Vì vậy, để dễ nhìn hơn, tôi đặt một thẻ số cho mỗi phương pháp. Đây là khi phương thức được gọi.
0 application:(UIApplication *)application didFinishLaunchingWithOptions:
1 applicationDidBecomeActive:
2 applicationWillResignActive:
3 applicationDidEnterBackground:
4 applicationWillEnterForeground:
Đầu tiên nhập ứng dụng: gọi 0, sau đó 1;
Nhấn nút trang chủ: gọi 2, sau đó 3;
Nút nhấn đúp vào nhà (đa nhiệm): gọi 2;
Nhập lại ứng dụng: gọi 4, sau đó 1;
tôi thấy sự chậm trễ của một chu kỳ trên thực sự nhận được các prefs hệ thống làm mới (standardUserDefaults) tại đây. ví dụ, 1. app-to-background 2. thay đổi sở thích ứng dụng 3. app-to-foreground: Không thay đổi! 4. ứng dụng-to-nền 5. app-to-nền: Có nó! –
điên, vì vậy tôi nghĩ rằng mặc định không được lưu bởi các ưu tiên hệ thống cho đến khi * sau * applicationDidBecomeActive() được gọi. tôi xác định điều này bởi vì nếu tôi chỉ in giá trị mỗi giây trong ứng dụng của tôi, nó đã được cập nhật. –
bạn có thể buộc đồng bộ hóa giá trị mặc định của người dùng với [[NSUserDefaults standardUserDefaults] synchronize]; – zambono