【问题标题】:"Unable to Load" message in Today's Widget今日小工具中的“无法加载”消息
【发布时间】:2015-01-23 06:20:51
【问题描述】:

我的小部件开发介于两者之间。因为我们已经将我们的应用程序与小部件集成放在了一起。但是现在,我在 iOS 中遇到了今天的小部件的问题。我已经为两种情况编写了代码。第一次当小部件在应用程序启动时首次加载时,它会调用 Web 服务并通过 Internet 获取数据,然后我们将它们存储到用户默认值中以供以后使用。

现在,当下次用户下拉通知菜单时,我们首先向用户显示我们旧存储的内容,然后我们从 web-service 获取它并存储在 user-default 中,然后再次重新加载表。

对于上述操作,我在某些情况下面临表格内容大小问题、闪烁问题和“无法加载”消息。

现在看看下面的代码,我在下面的方法中进行网络调用,在网络服务响应之后,我只处理完成处理程序。

- (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];
}

所以,请与我分享您的经验和想法。

【问题讨论】:

  • 为了清楚起见,您正在调用您的 Web 服务,并且在调用完成之前您不会调用完成处理程序?
  • 是的,我做同样的事情。我调用 web-service 并在服务完成后,使用完成处理程序完成它。
  • 实际上,我每次都需要调用网络服务来为客户获取我的最新事件,但在我获取它们之前,我会尝试向客户显示之前获取的数据。因此,屏幕闪烁的可能性不大。我想用没有任何副作用的新内容刷新视图。

标签: ios ios-app-extension ios8-extension ios8-today-widget ios-extensions


【解决方案1】:

一般来说,每当小部件发生崩溃时,我都会看到“无法加载”消息。小部件尝试自行加载,如果它反复崩溃,那么它只会显示“无法加载”消息。调试你的小部件并确保没有任何东西导致它崩溃

【讨论】:

  • 我已在小部件中修复了我的问题,但它仍然显示“无法加载”。事实证明,如果小部件崩溃的次数足够多,iOS 甚至都没有尝试加载它。我不得不重新启动手机,然后加载。感谢您的提示!
【解决方案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));
}

我已按照上述步骤解决了与 Today Extension 相关的“无法加载”和“屏幕闪烁”问题。

【讨论】:

  • 很棒的方法,我的目标是“self.view.frame.size.width”
【解决方案3】:

您的小部件界面的布局约束可能不是唯一的。 没有任何布局约束的视图可能会裁剪其内容或与其他视图重叠。

【讨论】:

    猜你喜欢
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多