在 iOS 8 Today Extension 中获取 parse.com 用户数据时出现异常
Posted
技术标签:
【中文标题】在 iOS 8 Today Extension 中获取 parse.com 用户数据时出现异常【英文标题】:Exception when fetching parse.com user data in iOS 8 Today Extension 【发布时间】:2015-06-15 13:41:34 【问题描述】:我正在尝试获取 PFUser 的 PFObjects 列表以显示在 ios 8 Today Widget 中。
在 Parse 的 blog post 之后,我在我的主应用程序和 Xcode 扩展程序中启用了相同的应用程序组和钥匙串共享。
我还在主应用程序的 AppDelegate
和 Today Extension 的 viewDidLoad
中启用了以下功能:
[Parse enableLocalDatastore];
[Parse enableDataSharingWithApplicationGroupIdentifier:@"group.com.me.myapp" containingApplication:@"com.me.myapp"];
[Parse setApplicationId:@"myAppId" clientKey:@"myClientId"];
在widgetPerformUpdateWithCompletionHandler
中,我构造并执行了我的查询:
- (void) widgetPerformUpdateWithCompletionHandler:(void (^)(NCUpdateResult))completionHandler
PFQuery *query = [PFQuery queryWithClassName:@"Note"];
[query whereKey:@"User" equalTo:[PFUser currentUser]];
[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error)
if (!error)
// check for difference between current and new data
if([self hasNewData:objects])
// fresh data
notes = objects;
[self.tableView reloadData];
[self updatePreferredContentSize];
completionHandler(NCUpdateResultNewData);
else
// Data is the same
completionHandler(NCUpdateResultNoData);
else
// Failed
completionHandler(NCUpdateResultFailed);
];
第一次加载似乎工作正常 - 我能够获得我的 PFObjects 列表。但是,每当第二次重新加载扩展程序时,都会在 viewDidLoad
中的 enableDataSharingWithApplicationGroupIdentifier
调用中引发以下异常:enableDataSharingWithApplicationGroupIdentifier:containingApplication:' must be called before 'setApplicationId:clientKey''
。
我可以通过将通知中心滑动到“通知”选项卡并将其向后滑动来复制此重新加载,这将导致再次调用 viewDidLoad。
我已经仔细检查了调用方法的顺序是否正确,甚至修改了顺序但仍然出现崩溃。
有什么想法吗?提前致谢!
【问题讨论】:
【参考方案1】:试试这个
if(![Parse isLocalDatastoreEnabled])
[Parse enableLocalDatastore];
[Parse enableDataSharingWithApplicationGroupIdentifier:@"group.com.me.myapp" containingApplication:@"com.me.myapp"];
[Parse setApplicationId:@"myAppId" clientKey:@"myClientId"];
【讨论】:
确保 Parse 在扩展中只初始化一次可以缓解崩溃。但是,当我登录或退出主应用程序时,[PFUser currentUser] 的状态现在保持不变。 能否提供您的代码,您在哪里使用 PFUser? 我在上面的初始化步骤之后,在我的扩展的 viewDidLoad 中访问 [PFUser currentUser]。 您是否在扩展中从 LocalDatastore 获取 PFUser?您是否在主应用程序的注销\登录时更改了固定的 PFUser? 不,我没有从本地数据存储中检索 PFUser。根据parse.com/docs/ios/guide#extensions-shared-local-data 的文档,当前的 PFUser 应该在应用程序之间保持不变,因此我希望同步是无缝的,无需任何形式的手动固定或检索。在登录和退出我的应用程序时,我也没有更改固定的 PFUser。以上是关于在 iOS 8 Today Extension 中获取 parse.com 用户数据时出现异常的主要内容,如果未能解决你的问题,请参考以下文章
在 iOS 8 Today Extension 中获取 parse.com 用户数据时出现异常
如何通过 Today Extension (iOS 8) 访问 Core Data/CloudKit
在 iOS 8 Today Extension 中从 Storyboard 加载特定的 ViewController