41

Tôi đang lập kế hoạch triển khai nhiều tác vụ trong ứng dụng của mình. tôi có thể thấy nhiều phương pháp ở đây để làm điều đó trong AppDelegate như applicationWillResignActive, applicationDidEnterBackground, applicationWillEnterForeground ...Sử dụng các phương pháp nền/nền trước trong AppDelegate

Nhưng .... tôi không thấy cách họ nên được sử dụng, cũng không phải do tại sao họ đang không ở trong các ViewControllers ... Cũng không phải những gì họ đang ở đây.

Ý tôi là: khi ứng dụng nhập vào nền, tôi không biết chế độ xem người dùng của mình là gì. Và ngược lại, khi ứng dụng đi vào nền trước, làm cách nào tôi biết phải làm gì và những gì tôi có thể gọi, để cập nhật chế độ xem chẳng hạn?

tôi sẽ hiểu nếu các phương pháp đó mà trong mỗi bộ điều khiển xem, nhưng ở đây, tôi không nhìn thấy những gì họ có thể được sử dụng cho một cách cụ thể ...

Bạn có thể giúp tôi hiểu đường đi để thực hiện mọi thứ vào các phương pháp đó?

Trả lời

128

Mỗi đối tượng nhận được thông báo UIApplicationDidEnterBackgroundNotification khi ứng dụng chạy ẩn. Vì vậy, để chạy một số mã khi ứng dụng đi ở chế độ nền, bạn chỉ cần lắng nghe rằng thông báo mà bạn muốn:

[[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(appHasGoneInBackground:) 
              name:UIApplicationDidEnterBackgroundNotification 
              object:nil]; 

Đừng quên để giải phóng người nghe khi bạn không cần phải lắng nghe nó nữa :

[[NSNotificationCenter defaultCenter] removeObserver:self]; 

Và tốt nhất của tốt nhất, bạn có thể chơi theo cách tương tự với thông báo sau:

  • UIApplicationDidEnterBackgroundNotification
  • UIApplicationWillEnterForegroundNotification
  • UIApplicationWillResignActiveNotification
  • UIApplicationDidBecomeActiveNotification

Hãy vui vẻ! :-)

Nếu câu trả lời này đã giúp bạn, tôi sẽ vui mừng khi nhận được một phiếu bầu tán thành ;-)

+0

Tôi luôn quên tên của thông báo. Thật tuyệt khi nhảy lên Stack-Overflow và xem nó ngay tại đó! –

+4

Tôi nghĩ rằng bộ chọn phải là appHasGoneInBackground: - nó có một đối số kiểu NSNotification *. – Greg

+0

@Greg: Bạn thấy điều đó ở đâu? – Oliver

8

Chúng không nằm trong bất kỳ bộ điều khiển chế độ xem nào của bạn vì iOS sử dụng mẫu thiết kế 'đại biểu', nơi bạn có thể yên tâm rằng phương pháp sẽ kích hoạt lớp học (trong trường hợp này là App Delegate cho ứng dụng của bạn) khi được yêu cầu .

Là một quá trình học tập, tại sao bạn không đặt NSLog vào các phương pháp đó để xem khi nào chúng bị sa thải?

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

    // Override point for customization after application launch. 
    NSLog(@"didFinishLaunchingWithOptions"); 
    [self.window makeKeyAndVisible]; 

    return YES; 
} 


- (void)applicationWillResignActive:(UIApplication *)application 
{ 
    /* 
    Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. 
    Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game. 
    */ 
    NSLog(@"applicationWillResignActive"); 
} 


- (void)applicationDidEnterBackground:(UIApplication *)application 
{ 
    /* 
    Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. 
    If your application supports background execution, called instead of applicationWillTerminate: when the user quits. 
    */ 
    NSLog(@"applicationDidEnterBackground"); 
} 


- (void)applicationWillEnterForeground:(UIApplication *)application 
{ 
    /* 
    Called as part of transition from the background to the active state: here you can undo many of the changes made on entering the background. 
    */ 
    NSLog(@"applicationWillEnterForeground"); 
} 


- (void)applicationDidBecomeActive:(UIApplication *)application 
{ 
    /* 
    Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. 
    */ 
    NSLog(@"applicationDidBecomeActive"); 
} 


- (void)applicationWillTerminate:(UIApplication *)application 
{ 
    /* 
    Called when the application is about to terminate. 
    See also applicationDidEnterBackground:. 
    */ 
    NSLog(@"applicationWillTerminate"); 
} 
+0

Tôi hiểu khi họ đang bị sa thải, những gì tôi không hiểu là những gì cụ thể tôi sẽ có thể viết thành những phương pháp này như tôi không biết đó là ViewController hoạt động. – Oliver

+2

Không có bộ điều khiển xem 'hoạt động', đây là chương trình OO. Câu hỏi hay hơn là hỏi; "khi một trong những phương pháp này được kích hoạt khi ủy nhiệm ứng dụng một và chỉ của tôi, làm cách nào để đảm bảo các lớp quan trọng biết về nó?". Đó là vấn đề thiết kế và không phải là vấn đề lập trình. Ví dụ, bạn có thể có đối tượng Controller nghe thông báo được kích hoạt trong các phương thức ủy nhiệm ứng dụng đó, hoặc bạn có thể truyền chúng trực tiếp đến một Controller. –

+0

Tôi không chắc chắn sẽ ổn với bạn. Theo quan điểm của tôi, nó thực sự là một câu hỏi về những gì thực sự được hiển thị trên màn hình. Tùy thuộc vào những gì người dùng đã làm khi các sự kiện như vậy xảy ra, cách bạn quản lý chúng sẽ khác nhau.Hoặc có lẽ chúng ta chỉ nói cùng một điều với hai cách khác nhau. – Oliver

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