当我尝试登录注册用户并通过解析启用推送通知时,我的应用程序崩溃

2023-12-30

我正在尝试通过解析启用推送通知。如果已经有用户缓存并登录到应用程序,则解析通知代码将起作用。但是,如果我注销并尝试注册新用户,应用程序就会崩溃,并且收到一条错误消息:“NSInvalidArgumentException”,原因:“不能对 PFObject 上的键或值使用 nil”。使用 NSNull 作为值。'...我相信问题出在应用程序委托中的 didRegisterForRemoteNotificationsWithDeviceToken 方法。由于没有当前用户登录,因此当应用程序尝试创建 PFInstallation 时,所有关联字段都返回 nil。我在运行 PFInstallation 代码之前尝试使用 if 语句检查 currentUser,但应用程序仍然崩溃。我需要在注册后注册通知,但我不知道如何做到这一点,因为 didRegisterForRemoteNotificationsWithDeviceToken 需要在应用程序委托中发生。任何建议或解决方案都很感激。我的代码片段如下。谢谢!

编辑:此代码现在可以运行!

- (void)application:(UIApplication *)application
didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)newDeviceToken
{
    PFInstallation *currentInstallation = [PFInstallation currentInstallation];
    if ([PFUser currentUser] != nil) 
    {
        currentInstallation[@"currentUser"]=[PFUser currentUser];
    }
    else 
    {
        [currentInstallation removeObjectForKey:@"currentUser"];
    }
    [currentInstallation setDeviceTokenFromData:newDeviceToken];
    [currentInstallation saveInBackground];

}

用于发送推送通知

- (IBAction)send:(id)sender
{
    PFQuery *userQuery = [PFUser query];
    [userQuery whereKey:@"objectId" equalTo:self.recipient.objectId];
    PFQuery *query = [PFInstallation query];
    [query whereKey:@"user" matchesQuery:userQuery];

    NSString *sendingUser = self.currentUser.username;

    NSString *message = [NSString stringWithFormat:@"from %@: \n %@", sendingUser,self.message.text];

    PFPush *push= [[PFPush alloc]init];
    [push setQuery:query];
    [push setMessage:message];
    [push sendPushInBackground];

    NSLog(@"Message sent!");

    [self dismissViewControllerAnimated:NO completion:nil];

}


您仍然可以在没有当前用户的情况下注册安装,但必须确保该用户已从注册中删除 -

- (void)application:(UIApplication *)application
didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
{
    // Store the deviceToken in the current installation and save it to Parse.
    PFInstallation *currentInstallation = [PFInstallation currentInstallation];
    if ([PFUser currentUser] != nil)
    {
        currentInstallation[@"currentUser"]=[PFUser currentUser];
    }
    else {
        [currentInstallation removeObjectForKey:@"currentUser"];
    }
    [currentInstallation setDeviceTokenFromData:deviceToken];
    [currentInstallation saveInBackground];
}

然后,无论您在何处处理登录/注销事件,都可以更新当前安装记录。例如 -

-(void) loggedIn
{  

    PFInstallation *currentInstallation=[PFInstallation currentInstallation];
    currentInstallation[@"currentUser"]=[PFUser currentUser];
    [currentInstallation saveInBackground];

}

-(void) notLoggedIn
{

    PFInstallation *currentInstallation=[PFInstallation currentInstallation];
    [currentInstallation removeObjectForKey:@"currentUser"];
    [currentInstallation saveInBackground];

}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当我尝试登录注册用户并通过解析启用推送通知时,我的应用程序崩溃 的相关文章

随机推荐

  • DbSet<>.Local 使用时需要特别小心吗?

    几天来 我一直在努力从存储库中检索我的实体 DbContext 我试图在原子操作中保存所有实体 因此 不同的实体在一起对我来说代表着有价值的东西 如果所有实体都是 有效 那么我可以将它们全部保存到数据库中 实体 a 已存储在我的存储库中 需
  • 多个物体之间的碰撞

    我正在编写一个简单的物理系统来娱乐 但我遇到了一个让我陷入困境的问题 现在的基本算法是 移动物体 检查是否有碰撞 If there was a collision 将对象移动最小距离以解决碰撞 根据法线 质量等调整速度 我有一个移动的物体朝
  • 情感分析中的否定处理

    我在这里需要一点帮助 我需要识别 不好 不错 等负面词语 然后识别情绪的极性 消极或积极 除了处理否定之外 我做了所有事情 我只是想知道如何将否定包含在其中 我该怎么办 否定处理是一个相当广泛的领域 有许多不同的潜在实现 在这里 我可以提供
  • 无法确定存储版本 - 实体框架

    我正在当前解决方案的一个单独的项目中实现代码优先模式 因为我这样做了 所以我初始化了我的连接字符串DbContext我收到这个奇怪的错误 无法确定存储版本 有效的存储连接或 需要版本提示 我正在使用 Entity Framework 5 0
  • 从对象验证消息中删除字段名称

    我在表单中使用它对对象进行了简单的活动记录验证 form error messages message gt header message gt 这又会输出类似 FieldName My Custom message 的内容 我需要做的是从
  • JavaFX BooleanProperty 和 Hibernate

    我正在尝试将 JavaFX BooleanPropety 添加到由 Hibernate 保留的模型中 但出现以下错误 Caused by org hibernate MappingException Could not determine
  • 避免在释放控件时调用 Invoke

    我的工作线程中有以下代码 ImageListView下面是源自Control if mImageListView null mImageListView IsHandleCreated mImageListView IsDisposed i
  • RSpec:如何存根继承的方法 current_user (无需设计)?

    我有一个基于 MHartl 的控制器RoR4 教程 http www railstutorial org book single page 就像 MHartl 一样 我没有使用设计 I 推出了我自己的身份验证系统 http www rail
  • UIImagePickerController 快门

    I have bug with UIImagePickerController which source type is camera Sometimes after controller appeared shutter is not o
  • 实现 π (pi) 的 Spigot 算法

    我很难理解插口算法找到 pi here http www cut the knot org Curriculum Algorithms SpigotForPi shtml在页面底部 我在第 2 部分 将 A 放入常规形式 的底部迷失了方向
  • 如何在 C# 中的随机端口上创建 HttpListener 类?

    我想创建一个在内部提供网页服务的应用程序 并且可以在同一台计算机上的多个实例中运行 为此 我想创建一个HttpListener监听的端口是 随机选择 目前未使用 本质上 我想要的是这样的 mListener new HttpListener
  • 如何设置新创建的 emacsclient 的样式和位置?

    我最近改用 emacsclient 进行大部分文本编辑 我正在尝试将一些设置迁移到新的 略有不同的 环境 特别是 在我的 emacs 文件中 我有一个设置窗口大小并准备一些主题的函数 但是 emacs 文件中的代码不会在每次调用 emacs
  • 如何在 AppEngine Standard 和 Nodejs 中提供静态文件

    The 文档 https cloud google com appengine docs standard nodejs serving static files表示您只需更新您的 app yaml 就像 AppEngine 中的任何语言一
  • MongoDB:将多个集合中的数据合并为一个......如何?

    我如何 在 MongoDB 中 将多个集合中的数据合并到一个集合中 我可以使用map reduce吗 如果可以的话怎么办 因为我是新手 所以我非常感谢一些例子 MongoDB 3 2 现在允许人们通过以下方式将多个集合中的数据合并为一个集合
  • 测试 SQL Server 连接

    我构建了一个基于 Excel 的工具 它使用 ODBC 连接和查询表从 SQL Server 2014 提取数据 该工具必须与 Mac Office 2016 兼容 因此需要 ODBC 和查询表 我正在努力测试用户是否可以连接到 SQL S
  • 将两个多边形区域合并为R中的单个多边形区域

    我是 R 中处理空间数据和多边形的新手 我有两个独立的形状文件 包含从 Google 地球中提取的两个多边形 因此 基本上第一个形状文件是一个位置 例如购物中心等 第二个形状文件是第一个位置周围三公里的半径 我将两个形状文件作为 Spati
  • Glade:如何在 GtkAssistant 中编辑页面

    我想将内容添加到 Glade 中的助手窗口 GtkAssistant 的页面中 当我添加新助手时 GtkAssistant 下没有出现任何子项 此外 我无法选择 或删除或更改 Glade 生成的 3 个默认页面的内容 我只能选择助手本身 因
  • 使用 groovy 修改 Soap UI 请求

    我们需要查找当前国家 地区的经销商数量 在下面的 xml 请求中 每个请求的键值对都会有所不同 Soap 请求的输入将在 txt 文件中给出 根据 txt 文件中的输入数量 我需要动态生成键值对 xml 标签 Format of Input
  • 使用python计算矢量投影

    有没有更简单的命令来计算矢量投影 我改为使用以下内容 x np array 3 4 0 y np array 10 5 6 z float np dot x y z1 float np dot x x z2 np sqrt z1 z3 z
  • 当我尝试登录注册用户并通过解析启用推送通知时,我的应用程序崩溃

    我正在尝试通过解析启用推送通知 如果已经有用户缓存并登录到应用程序 则解析通知代码将起作用 但是 如果我注销并尝试注册新用户 应用程序就会崩溃 并且收到一条错误消息 NSInvalidArgumentException 原因 不能对 PFO