1

我对通知非常熟悉,但是在使用应用内购买后,我毫无理由地崩溃了(我怀疑它是否与它有关)。

所以当用户完成购买时,这个函数被调用:

- (void)provideContentForProductIdentifier:(NSString *)productIdentifier
{
     [[NSUserDefaults standardUserDefaults] setBool:YES forKey:productIdentifier];
    [[NSUserDefaults standardUserDefaults] synchronize];
    [[NSNotificationCenter defaultCenter] postNotificationName:IAPHelperProductPurchasedNotification object:productIdentifier userInfo:nil];

    // i get the crash here when trying to post the notification.
 }

现在,具有观察者的主要场景设置为:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(productPurchased:) name:IAPHelperProductPurchasedNotification object:nil];

是因为观察者上的对象设置为 nil 吗?应该是什么?

4

2 回答 2

1

我建议将信息放入 userInfo 中,如下所示:

- (void)provideContentForProductIdentifier:(NSString *)productIdentifier
{
    [[NSUserDefaults standardUserDefaults] setBool:YES forKey:productIdentifier];
    [[NSUserDefaults standardUserDefaults] synchronize];
    [[NSNotificationCenter defaultCenter] postNotificationName:IAPHelperProductPurchasedNotification object:nil userInfo:@{@"identifier": productIdentifier}];

    // i get the crash here when trying to post the notification.
 }

然后你可以观察 NSNotification

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(productPurchased:) name:IAPHelperProductPurchasedNotification object:nil];

-(void) productPurchased:(NSNotification*)notification您可以获取信息:

-(void) productPurchased:(NSNotification*)notification {
   NSString *productIdentifier = [notification.userInfo valueForKey:@"identifier"];
}
于 2013-06-17T07:46:48.737 回答
0

可能会出现此问题,因为您有一个 nil 对象作为NSNotification observer.

当对象解除分配时,最好从 NSNotificationCenter 的观察者列表中删除 self。

添加这个

- (void) dealloc  {
  [[NSNotificationCenter defaultCenter] removeObserver:self];
}

在所有作为通知观察者的类中。(请注意,您可能希望在其他地方移除观察者。例如在 viewDidDisappear 中)

于 2013-06-17T07:46:33.713 回答