2012-03-04 9 views
51

Trong ứng dụng này mà tôi đang cố gắng tạo, tôi sử dụng thông báo đẩy. Phần này hoạt động tốt. Khi tôi gửi thông báo, tôi cũng thêm huy hiệu vào biểu tượng ứng dụng. Vấn đề là khi tôi ăn trưa ứng dụng nó sẽ biến mất một lần nữa, nhưng nó không.Xóa huy hiệu khỏi biểu tượng ứng dụng iOS

-(IBAction)Push{ 

    NSMutableDictionary *data = [NSMutableDictionary dictionary]; 

    [data setObject:@"Numfeud: Troels made a move!" forKey:@"alert"]; 

    [data setObject:[NSNumber numberWithInt:1] forKey:@"badge"]; 

    [data setObject:@"bar" forKey:@"foo"]; 

    [PFPush sendPushDataToChannelInBackground:@"GameChannel2" withData:data]; 
} 

Trong application didFinishLaunchingWithOptions tôi cố gắng thiết lập huy hiệu 0 theo cách này:

[UIApplication sharedApplication].applicationIconBadgeNumber = 0; 

Làm thế nào tôi có thể xóa biểu tượng biểu tượng ứng dụng?

Trả lời

8

Có khả năng, -application:didFinishLaunchingWithOptions: không được gọi, vì ứng dụng của bạn vẫn chạy trong nền. Để xóa số lượng huy hiệu khi ứng dụng được khởi chạy từ nền, bạn cũng sẽ phải đặt lại số huy hiệu trong số -applicationWillEnterForeground:.

+0

Cảm ơn Fabian! Câu trả lời của bạn chỉ là những gì tôi cần :) thannnkkss – thar

+0

Are -applicationDidBecomeActive and -applicationWillEnterForeground: làm tương tự ít hoặc nhiều hơn? Khi đặt lại trong ứng dụngDidBecomeActive. Nó làm việc cả hai tình huống. – thar

+0

-applicaionDidBecomeActive: cũng sẽ được gọi khi quay lại từ cuộc gọi điện thoại. -ứng dụngWillEnterForeground: là phương pháp thích hợp trong tình huống của bạn. –

192

Nếu ứng dụng của bạn trở nên hoạt động trở lại và vẫn là ở chế độ nền, bạn nên thiết lập lại số huy hiệu trong -applicationDidBecomeActive: cũng như:

- (void)applicationDidBecomeActive:(UIApplication *)application 
{ 
    application.applicationIconBadgeNumber = 0; 
} 

Nếu ứng dụng của bạn vẫn chạy trong nền -application:didFinishLaunchingWithOptions: sẽ không được gọi.

+0

Cảm ơn! Sau đó, có cái gì đó có ý nghĩa :) Hoạt động chỉ tìm thấy, tôi chỉ đặt lại nó trong phương pháp BecomeActive. Không thể tại sao tôi nên có nó hai lần? – thar

+6

Đặt lại một lần trong '' -applicationDidBecomeActive: '' sẽ làm tốt. Bởi vì phương thức này cũng sẽ được gọi khi '' -application: didFinishLaunchingWithOptions: '' được gọi. Vui lòng chấp nhận câu trả lời của tôi :) – Mark

0

Bạn cũng có thể sử dụng mã này.

- (void)applicationDidBecomeActive:(UIApplication *)application 
{ 
    application.applicationIconBadgeNumber = 0; 
} 

hoặc Trong một ViewController cụ

- (void)awakeFromNib { 
    [UIApplication sharedApplication].applicationIconBadgeNumber = 0; 
} 
+1

Mã chính xác này là một phần của câu hỏi. – Brian

+1

Tại sao một người nào đó bỏ phiếu cho câu trả lời này? –

1

Có lẽ gọi nó trong applicationWillResignActive (trong AppDelegate.m):

-(void)applicationWillResignActive:(UIApplication *)application{ 
    [UIApplication sharedApplication].applicationIconBadgeNumber = 0; 
} 

Điều này sẽ giúp bạn xóa badge nếu push đến khi ứng dụng đang được mở. Người dùng nhìn thấy notification và bạn xóa nó khi nhấn Home Button (một hoặc hai lần). Ngoài ra, sẽ rõ ràng nếu appclosed (xóa sau khi người dùng mở nó).

Here bạn có thể thấy khi phương thức này được gọi.