2012-04-17 43 views
6

Tôi đang làm việc trên một dự án trong phiên bản Xcode 4.2.1 và trong iOS 5.0. Tôi tự hỏi chức năng nào sẽ được gọi khi bạn chấm dứt hoàn toàn một ứng dụng, có nghĩa là ngay cả khi người dùng buộc ứng dụng chạy trên nền bị chấm dứt khỏi màn hình chính. Tôi đã giả định rằngChức năng nào được gọi khi ứng dụng iPhone bị chấm dứt?

(void)applicationWillTerminate:(UIApplication *)application

sẽ được gọi, nhưng nó bật ra nó không được gọi là ngay cả sau khi chấm dứt các ứng dụng trên nền. Những gì tôi về cơ bản muốn làm là gọi một phương thức mà tôi đã tạo ngay trước khi ứng dụng bị chấm dứt hoàn toàn, vì vậy cần biết chức năng nào được gọi ở cuối ứng dụng.

Cảm ơn bạn.

+0

Ông có thể xin vui lòng chọn/Checkmark một trong những câu trả lời. –

Trả lời

1

Nếu ứng dụng đã bị tạm ngừng, ứng dụng sẽ không nhận được thêm thông báo. Xem thông báo didEnterBackground.

+0

Bạn có nghĩa là tôi không thể nhận ra những gì tôi muốn làm miễn là tôi đang ở trong màn hình chủ? Đối với chức năng, tôi không tìm thấy nó mặc dù nhìn thấy một loại chức năng như vậy. – Max

+0

-1: Không có thông báo "willSuspend" hoặc thông báo ủy quyền. Bạn có thể muốn "didEnterBackground". – rickster

+0

Tôi có thể không muốn nó bởi vì tôi muốn gọi một phương pháp khi ứng dụng được hoàn toàn chấm dứt, không phải khi nhấn nút home. Đó là, tôi không muốn gọi phương pháp của tôi khi chỉ cần nhập vào nền. – Max

0
- (void)applicationWillTerminate:(UIApplication *)application 

Đó là trong giao thức UIApplicationDelegate.

0

documentation here giải thích hành vi của trường hợp này.

Tóm lại, bạn sẽ chỉ nhận được thông báo applicationWillTerminate: nếu ứng dụng đang chạy (ở nền trước hoặc nền) khi nó bị chấm dứt. Vì vậy, trừ khi ứng dụng của bạn chạy ở nền trước hoặc ở một trong các chế độ nền dài (ví dụ: VoIP, Âm thanh hoặc tác vụ dài hạn được chỉ định bởi beginBackgroundTaskWithExpirationHandler), nó sẽ chuyển từ trạng thái background sang trạng thái suspended khá nhanh. Trong trường hợp này, bạn sẽ không bao giờ nhận được thông báo applicationWillTerminate:.

5

Here's a good overview thông báo vòng đời ứng dụng & tin nhắn đại biểu trên iOS 4.0 trở lên. Trong ngắn ...

Ứng dụng của bạn thường sẽ không bao giờ thấy sẽĐiều chỉnh, bởi vì hệ thống thường chỉ chấm dứt ứng dụng của bạn khi ứng dụng đã bị tạm dừng (trong nền). Sau khi ứng dụng của bạn bị tạm ngưng, ứng dụng sẽ không còn cơ hội để hành động (*), vì vậy không có gọi lại cho ứng dụng đó.

doEnterBackground tin nhắn hoặc thông báo của đại biểu phải được coi là cơ hội cuối cùng để làm sạch mọi thứ hoặc lưu trạng thái trước khi có thể chấm dứt.


(*) Được rồi, ứng dụng của bạn có thể làm những thứ nếu đó là một trong các phương thức thực hiện nền hỗ trợ, giống như âm thanh, VoIP, hoặc chuyển hướng, nhưng trong trường hợp đó nó hoặc chưa bị đình chỉ chưa hoặc nó đã bị tạm ngưng với một điểm vào cụ thể cho chế độ nền đó.

+0

Vì vậy, trong trường hợp người dùng buộc phải dừng ứng dụng đang chạy trên nền, sẽ không có cách nào tốt để gọi phương thức của tôi. Cảm ơn sự giúp đỡ của bạn. – Max

+0

Có thể bạn sẽ không nhận được thông báo ngay cả khi đó; trừ khi người dùng chấm dứt ứng dụng của bạn thông qua trình chuyển đổi ứng dụng trong vòng vài giây của ứng dụng sẽ chuyển sang nền, ứng dụng của bạn sẽ bị tạm ngưng. – rickster

-1

Ba phương pháp sẽ rất hữu ích:

- (void)applicationWillResignActive:(UIApplication *)application 
    { 
    } 

    - (void)applicationDidEnterBackground:(UIApplication *)application 
    { 
    } 

    - (void)applicationWillTerminate:(UIApplication *)application 
    { 
    } 
18

"applicationWillTerminate" phương pháp sẽ được gọi là chỉ khi ứng dụng là không lơ lửng trạng thái khi bị chấm dứt.

Để hiểu điều này, xem xét hiện ứng dụng của bạn ở trạng thái hoạt động foreground, đi qua sau hai trường hợp:

Trường hợp 1: Khi bạn đơn tap Trang chủ nút, ứng dụng trực tiếp đi vào trạng thái lơ lửng bằng cách gọi phương thức - (1) applicationWillResignActive và sau đó (2) applicationDidEnterBackground.

Bây giờ, khi bạn cố gắng thoát/chấm dứt ứng dụng, bằng cách nhấn đúp vào nút trang chủ và sau đó vuốt màn hình ứng dụng hiện tại từ màn hình ứng dụng gần đây, ứng dụng ở trạng thái bị tạm ngưng. Vì vậy, phương thức "applicationWillTerminate" sẽ không được gọi.

Trường hợp 2: Khi bạn nhấp đúp vào Trang chủ nút, ứng dụng đi thành không hoạt động nhà nước bằng phương pháp gọi - (1) applicationWillResignActive.

Bây giờ khi bạn cố gắng thoát/chấm dứt ứng dụng, bằng cách vuốt màn hình ứng dụng hiện tại từ màn hình ứng dụng gần đây, ứng dụng ở trạng thái không hoạt động (không ở trạng thái bị treo) trong khi bị chấm dứt. Vì vậy, phương thức "applicationWillTerminate" sẽ được gọi.

Nhìn những gì Apple nói: enter image description here

Để biết thêm về cái nhìn này - Apple's Official Documentation on applicationWillTerminate(_:)

+0

Câu trả lời hay, cảm ơn! Sẽ được mát mẻ để cũng có một liên kết đến tài liệu của Apple. –

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