当前位置: 首页 > 知识库问答 >
问题:

isRegisteredForRemoteNotifications使用semaphore_wait_trap锁定UI

易炳
2023-03-14

我的iOS应用程序在收到推送通知时出现了一个奇怪的情况。UI保持锁定,什么都不起作用。当我暂停调试器时,我会在我的线程中看到

对代码进行解译,我可以看到它与两件事有关:

    方法(因为当我删除它时,问题就消失了)/li>

我收到一个推送通知,如下所示

{aps: 
    {alert: { loc-args: [Fiat, Bravo, 501],
     loc-key: SOME_TEXT 
    },
    badge: 0,
    sound: default.aiff
    }
}

我用Xcode做了一个新的简单的项目来证明我所说的。我使用前一个bundle标识符来接收相同的推送。按照AppDelegate中显示问题的代码操作:

@implementation AppDelegate


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.
    return YES;
}

- (void)application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {

    NSLog(@"My token is: %@", deviceToken);
}

- (void)application:(UIApplication*)application didFailToRegisterForRemoteNotificationsWithError:(NSError*)error {
    //    [DefaultMethods saveInUserDefaults:@(1) forKey:kUserWasAskedForNotificationKey];
    NSLog(@"Failed to get token, error: %@", error);
}

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {

    if( [[UIApplication sharedApplication] isRegisteredForRemoteNotifications] ){
        NSLog(@"Success");
    }
}


@end

谢谢你的任何帮助!

共有2个答案

拓拔骁
2023-03-14

我也有同样的问题。

结果,我还在控制台上收到了一个推送通知解析错误(就像上面@cfifok)。

“NSXPCConnection:---”连接到名为com.apple.UserNotifications.UserNotificationService的服务:解码接收到的消息时捕获异常,丢弃传入消息。异常:解码参数0(调用的。2)时发生异常:异常:键“ns.objects”的值属于意外的类“nsNumber"。允许的类为“{(NSString,NSArray)”。

这是因为 不是字面上接受3333,而是接受它为字符串 。在我访问了提到的方法 之后,这个小东西让我的整个接口停滞了。

有一点要考虑到,这种摊子只会在iOS 11上发生。它在iOS12.0(16A5366A)上工作得非常好。

null

null

贺福
2023-03-14

我也在处理这个问题,并且在我的设备日志中发现了这个错误:

null

调用isRegisteredForRemoteNotifications后,应用程序已停止。

null

 类似资料:
  • 问题内容: 我在这里思考:如果您有2个线程执行需要同步的FAST操作,那么非阻塞方法不是比阻塞/上下文切换方法更快/更好的方法吗? 非阻塞的意思是: while(true){如果(checkAndGetTheLock())中断;} 如果您有太多线程在锁中循环,我唯一想到的就是饥饿(CPU耗尽)。 如何平衡一种方法与另一种方法? 问题答案: 以下是 Java Concurrency in Pract

  • 问题内容: 我希望以下测试仅打印“已被锁定”一次。但是它因此会打印行。 据我了解,将在可能的情况下将其锁定(即,如果尚未锁定)。但是显然不是这样。 如何设置这样的锁线程安全? 问题答案: 名称为,表示您已经拥有锁了。 如果希望使用线程块,则可以使用例如具有1(或更多)许可的a。

  • 问题内容: 我们的一位客户正在使用某些Novell安全软件,有时会锁定我们的软件创建的某些.class文件。发生这种情况时,这会给他们带来一些麻烦的问题,我正在尝试研究一种变通办法,我们可以将其添加到错误处理中以解决此问题。我想知道java api中是否有任何调用可用于检测文件是否已锁定,如果已锁定,则将其解锁。 问题答案: 在尝试写入文件之前,您可以使用File.canWrite()检查Java

  • 问题内容: 我看不到以下代码如何产生看起来违反对象锁定义的输出。当然应该只允许一个线程打印“ acquired lock”消息,但两者都可以吗? 问题答案: 这是因为对的调用释放了锁定,从而允许第二个线程进入同步块。从javadoc中提取 该线程释放此监视器的所有权,并等待直到另一个线程通过调用notify方法或notifyAll方法通知等待在该对象监视器上等待的线程唤醒。然后,线程等待,直到它可

  • Hibernate有悲观锁定机制,可以用来锁定数据库行。 session.lock(Object对象,LockMode锁模式)。 假设我锁定了一个对象: > 如果其他线程也发出上述语句 1,会发生什么?该线程会简单地阻塞吗?还是会得到某种异常?像 CannotAcquireLock 异常这样的东西?我想了解 1,2,3 的行为。 如果线程获取了锁然后死亡会发生什么?锁会自动释放吗?还是记录永远锁定

  • 问题内容: 这不是完整/正确的MySQL查询伪代码: http://dev.mysql.com/doc/refman/5.0/en/select.html指出:如果将FOR UPDATE与使用页面或行锁的存储引擎一起使用,则查询所检查的行将被写锁,直到当前交易结束 是这里只有被MySQL锁定返回的一条记录还是必须扫描以查找单个记录的所有记录? 问题答案: 我们为什么不尝试一下呢? 设置数据库 现在