我介入我的小部件开发之间。我们已经将我们的应用程序与小部件集成放在一起但是现在好几天,我在iOS中遇到了今天小部件的问题。我已经为两个案例编写了代码。第一次在小部件最初首次加载应用程序时,它会调用Web服务并通过Internet获取数据,然后我们将它们存储到用户默认值以供以后使用。
现在,当下次用户下拉通知菜单时,我们首先向用户显示旧的存储内容,然后我们从网络服务获取它并以用户默认存储,然后再次重新加载表。
对于上述操作,我面临表格内容大小问题,闪烁问题以及"无法加载"在某些情况下会发出消息。
现在看看下面的代码,我在下面的方法中进行网络调用,在web-service的响应之后,我只是处理完成处理程序。
- (void)widgetPerformUpdateWithCompletionHandler:(void (^)(NCUpdateResult))completionHandler {
// Perform any setup necessary in order to update the view.
// If an error is encountered, use NCUpdateResultFailed
// If there's no update required, use NCUpdateResultNoData
// If there's an update, use NCUpdateResultNewData
[self getBookedAppointmentsNew:completionHandler];
}
所以,请与我分享您的经验和想法。
答案 0 :(得分:5)
一般情况下,只要窗口小部件发生崩溃,我就会看到“无法加载”消息。小部件尝试加载自身,如果它反复崩溃,那么它将只显示“无法加载”消息。调试您的小部件并确保没有任何因素导致其崩溃
答案 1 :(得分:2)
最后,我找到了解决问题的方法。请看下面的代码。
在viewDidLoad()方法中,我刚刚将视图的首选内容大小设置为启动时显示底部视图所需的基本高度,然后我进行了Web服务调用以获取数据。获取数据后,我再次设置了TodayWidget视图的首选内容大小。
-(void)viewDidLoad
{
[super viewDidLoad];
self.bottomView.frame = CGRectMake(self.bottomView.frame.origin.x, 0.0, self.bottomView.frame.size.width, self.bottomView.frame.size.height);
self.preferredContentSize = CGSizeMake(self.view.frame.size.width, self.bottomView.frame.size.height);
[self getBookedAppointmentsNew];
}
-(void)getBookedAppointmentsNew
{
//-- After web-service response (positive/negative), I have set again the preferred content size.
self.bottomView.frame = CGRectMake(self.bottomView.frame.origin.x, self.scrollView.frame.size.height, self.bottomView.frame.size.width, self.bottomView.frame.size.height);
self.preferredContentSize = CGSizeMake(self.view.frame.size.width, (self.bottomView.frame.origin.y + self.bottomView.frame.size.height));
}
我已按照上述步骤解决有关"无法加载"的问题和"屏幕闪烁"与今日推广。
答案 2 :(得分:0)
您的窗口小部件界面的布局约束可能不是唯一的。 没有任何布局限制的视图可能会裁剪其内容或与其他视图重叠。