2010-10-15 26 views
6

tôi mới cho iPhone dev ... Tôi đang xây dựng một ứng dụng mà tải dữ liệu từ một db sqlite3 địa phương trongTải lại dữ liệu ứng dụng khi ứng dụng đi vào nền trước?

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 

Khi tôi gõ nút iPhone và đặt nó ở chế độ nền và sau đó tôi nhớ lại nó i xem (như bình thường) các ứng dụng trong cùng một cách tôi rời nó. Những gì tôi muốn làm là, khi nó đến trong foregroud, để tải lại dữ liệu như thể nó được gọi là từ đầu.

Cách nào đúng để thực hiện?

Cảm ơn trước c.

Trả lời

13
- (void)applicationDidBecomeActive:(UIApplication *)application { 
} 

Tải lại dữ liệu trong chức năng ở trên của ứng dụng ủy quyền để làm mới dữ liệu khi ứng dụng đến trước.

+0

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ó! –

+0

đ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. –

+0

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

3

Bạn có thể exit() ứng dụng của bạn khi iOS thông báo cho nó rằng nó nên chạy ở chế độ nền như vậy:

- (void)applicationDidEnterBackground:(UIApplication *)application { 
    exit(0); 
} 
+12

Tôi sẽ không làm điều này bằng tay - có phím "UIApplicationExitsOnSuspend' Info.plist cho các ứng dụng không muốn chạy ở chế độ nền. – zoul

+0

Cảm ơn zoul vì thông tin ... – SegFault

3

Tôi nghĩ rằng đó là đại biểu của UIApplication:

- (void)applicationWillEnterForeground:(UIApplication *)application 

Trong iOS 4.0 và sau đó, phương pháp này là được gọi là một phần của quá trình chuyển đổi từ nền sang trạng thái hoạt động. Bạn có thể sử dụng phương pháp này để hoàn tác nhiều về những thay đổi bạn đã thực hiện cho ứng dụng của mình khi nhập nền . Cuộc gọi đến phương thức này là luôn được theo sau bằng cách gọi đến phương thức applicationDidBecomeActive: sau đó chuyển ứng dụng từ trạng thái không hoạt động sang trạng thái hoạt động.

62

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;

    • nếu người dùng chọn một ứng dụng khác hoặc nhấn nút trang chủ lần nữa: gọi 3;

    • nếu người dùng nhấn đúp vào nút trang chủ lần nữa: gọi 1;

  • Nhập lại ứng dụng: gọi 4, sau đó 1;

+0

Cảm ơn bạn rất nhiều, giải thích rõ ràng! – Cris

+0

Có, 1, đây là một lời giải thích tuyệt vời, cảm ơn! – livingtech

+0

Tôi đã thay đổi chúng. cảm ơn bạn! – sbs

Các vấn đề liên quan