- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们最近在我们的应用程序中添加了 Today Extension。
它是一个带有简单 tableView 的扩展,用于从我们的服务器加载数据,用 Swift 编写。
但在扩展对我们的用户在线后,我们从 Crashlytics
收到了大量崩溃数据,Apple 也报告了同样的崩溃问题。
但是,我们无法重现崩溃,甚至无法找到崩溃的原因,因为崩溃发生在系统调用的widgetPerformUpdateWithCompletionHandler
方法上。
以下是崩溃日志的详细信息,部分信息被替换。
Crashed: com.apple.main-thread
0 MyAppWidget 0x100091d8c MyAppWidgetViewController.(widgetPerformUpdateWithCompletionHandler((NCUpdateResult) -> ()) -> ()).(closure #1) (MyAppWidgetViewController.swift)
1 MyAppKit 0x100603ab4 partial apply for thunk (PostService.swift)
2 MyAppKit 0x100626080 ServiceRequestPerfomer.(performRequest(A, complete : ([B]?, NSError?) -> ()?) -> ()).(closure #1) (ServiceRequestPerformer.swift:35)
3 MyAppKit 0x1006258d4 partial apply for ServiceRequestPerfomer.(performRequest(A, complete : ([B]?, NSError?) -> ()?) -> ()).(closure #1) (ServiceRequestPerformer.swift)
4 MyAppKit 0x100626b34 ServiceRequestPerfomer.((request in _3C50B415180DDC893FFCB75CD7EE7019)(A, complete : (response : Response?, error : NSError?) -> ()?) -> ()).(closure #1) (ServiceRequestPerformer.swift:144)
5 Moya 0x1004b7468 MoyaProvider.(requestNormal(A, queue : OS_dispatch_queue?, progress : (progress : ProgressResponse) -> ()?, completion : (result : Result<Response, Error>) -> ()) -> Cancellable).(closure #1).(closure #1) (Moya.swift:229)
6 Moya 0x1004b8968 MoyaProvider.((sendAlamofireRequest in _1A5616FEE5C423A992964CB19AABD52B)(Request, target : A, queue : OS_dispatch_queue?, progress : (progress : ProgressResponse) -> ()?, completion : (result : Result<Response, Error>) -> ()) -> CancellableToken).(closure #3) (Moya.swift)
7 Moya 0x1004b57b8 partial apply for MoyaProvider.((sendAlamofireRequest in _1A5616FEE5C423A992964CB19AABD52B)(Request, target : A, queue : OS_dispatch_queue?, progress : (progress : ProgressResponse) -> ()?, completion : (result : Result<Response, Error>) -> ()) -> CancellableToken).(closure #3) (Moya.swift)
8 Alamofire 0x1002cff64 Request.(response(queue : OS_dispatch_queue?, completionHandler : (NSURLRequest?, NSHTTPURLResponse?, NSData?, NSError?) -> ()) -> Self).(closure #1).(closure #1) (ResponseSerialization.swift)
9 libdispatch.dylib 0x1819e14bc _dispatch_call_block_and_release + 24
10 libdispatch.dylib 0x1819e147c _dispatch_client_callout + 16
11 libdispatch.dylib 0x1819e6b84 _dispatch_main_queue_callback_4CF + 1844
12 CoreFoundation 0x181f4cd50 __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 12
13 CoreFoundation 0x181f4abb8 __CFRunLoopRun + 1628
14 CoreFoundation 0x181e74c50 CFRunLoopRunSpecific + 384
15 GraphicsServices 0x18375c088 GSEventRunModal + 180
16 UIKit 0x18715e088 UIApplicationMain + 204
17 libxpc.dylib 0x181c38ce0 _xpc_objc_main + 784
18 libxpc.dylib 0x181c3a9dc xpc_main + 200
19 Foundation 0x182a57d60 service_connection_handler + 170
20 PlugInKit 0x18929ac48 -[PKService run] + 544
21 PlugInKit 0x18929a8dc +[PKService main] + 56
22 PlugInKit 0x18929ac6c +[PKService _defaultRun:arguments:] + 20
23 libextension.dylib 0x18286a058 NSExtensionMain + 64
24 libdispatch.dylib 0x181a128b8 (Missing)
以及widgetPerformUpdateWithCompletionHandler
的代码
func widgetPerformUpdateWithCompletionHandler(completionHandler: ((NCUpdateResult) -> Void)) {
// Perform any setup necessary in order to update the view.
// If an error is encountered, use NCUpdateResult.Failed
// If there's no update required, use NCUpdateResult.NoData
// If there's an update, use NCUpdateResult.NewData
let options: [String: AnyObject] = [DCKPostPopularAttributeName : true.stringValue,
DCKPaginationLimitAttributeName : 5]
postService.posts(options: options) { (posts, error) in
let historyPosts = self.userDefaults.arrayForKey(MyAppWidgetViewController.WidgetPostReadIdentifier) as? [UInt]
if let historyPosts = historyPosts {
self.posts = posts!.filter({ (Post) -> Bool in
return !historyPosts.contains(Post.id)
})
} else {
self.posts = posts!
}
self.tableView.reloadData()
self.tableView.hidden = false;
self.loadingLabel?.hidden = true
self.activityIndicator?.stopAnimating()
let contentSize = self.tableView.contentSize
self.preferredContentSize = CGSizeMake(CGRectGetWidth(self.view.frame), contentSize.height);
self.loadMorePostsIfNeeded()
}
completionHandler(NCUpdateResult.NewData)
}
奇怪的是:
我们在正常使用 Today Extension 时没有遇到崩溃问题(它应该显示 Unable to load
如果 today extension 崩溃)
我们没有收到任何用户报告今天扩展程序无法正常工作的问题。
我们在我们的设备上发现了相同的崩溃日志,但今天的扩展正常工作,如 1.
所述。还有,记录崩溃日志的时间,我没有用我的手机!
所以我们猜测这是一次“假”崩溃,记录了崩溃,但扩展程序并没有真正崩溃。
有人遇到同样的问题吗?谢谢!
最佳答案
回答我自己的问题,
@matt 是对的,现在我调用 completionHandler
仅当数据获取任务完成时,而不是总是调用 completionHandler
在 widgetPerformUpdateWithCompletionHandler
的最后方法。
我没有再收到崩溃,问题解决了!
关于iOS Today 扩展崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39114127/
我需要找到当天创建的帐户,以及过去 7 天创建的帐户。 为了找到我今天的结果,它起作用了,我这样做了: SELECT * FROM `account` where DATE(created_at) =
我有一个R脚本,只打印今天的日期。它在Rstudio中运行良好,但是在批处理文件中设置为任务时会产生以下错误 Warning message: package 'dplyr' was built un
我可以使用日期范围过滤数据框: df[(df['Due Date'] >= '2017-01-01') & (df['Due Date'] <= '2017-02-01')] 但我希望能够过滤一年 最
我想提取今天的日期,如果今天是星期五,则执行 (today-3) else (today-11) 并在下面的删除语句中使用此查询的结果 这是我的查询: Delete from table where
我正在尝试这个 (datetime.datetime.today()-datetime.datetime.today()).days 给出 -1 并期待值 0 而不是我得到 -1。在这种情况下,我将结
感谢大家考虑我的新手问题。我正在使用 jQuery 迭代表并捕获数组中的所有硬编码日期。我将这些日期与 Date.today(); 进行比较使用 .isAfter() 函数。如果硬编码的日期是过去的,
我正在实现 Angular-UI datepicker作为指令,我试图让它将今天的日期显示为字符串“Today”而不是 2015/04/27。 这可能吗?我可以轻松地将 $scope.dt 更改为 "
在 Ruby 中,万圣节: Date.today - 6.months + 6.months != Date.today 我们需要更新 Ruby 的日期实现吗?其他语言有同样的问题吗? 最佳答案 如果
如何让 Moment.js 返回“今天”或其他相关条款?我无法在涵盖此内容的文档中找到任何内容。 最佳答案 您还可以使用日历功能: moment().calendar(moment().add(1,
我试过 SELECT * FROM `activity` WHERE 1 ORDER BY CASE WHEN `activity_date` >= '2019-06-14' THEN `ac
我目前在 UTC+1 时区。 TimeZoneInfo.Local.BaseUtcOffset 返回 +1。 new DateTimeOffset(DateTime.Today).AddDays(4)
想知道是否有人可以帮助我使用这个 Excel 公式。 我有一个字段,其日期格式如下 2018-07-02 11:37:19YYYY-MM-DD HH:MM:SS In the adjacent col
我想确定给定的日期对象是否与当前日期相同。下面是伪代码。 // date is a Date object function (date) { if (date == Today())
我从苹果文档中看到,在今天的小部件中,系统会拍摄快照,当需要绘制小部件时,它会先显示快照,然后在需要时执行更新。 To help your widget look up to date, the sy
我正在尝试将今日小部件的背景更改为透明,而不会产生模糊效果,但我不知道该怎么做。有人能够更改小部件的背景吗?甚至可以做到这一点吗? 最佳答案 不,您无法更改小部件背景颜色,也无法删除模糊效果 关于iO
我今天是 iOS 编程新手扩展。当我创建一个新的扩展目标时,我尝试运行它。 Error image Xcode 给出关于我的容器应用程序的错误。我尝试将所有 pod 导入扩展目标,但我的一些 pod
我为我的应用程序创建了一个显示在“今日 View ”中的小部件扩展。它工作得很好,但是它切断了下一个小部件开始的内容的底部。我试图在 preferredContentSize 中调整高度,但它似乎没有
我们最近在我们的应用程序中添加了 Today Extension。 它是一个带有简单 tableView 的扩展,用于从我们的服务器加载数据,用 Swift 编写。 但在扩展对我们的用户在线后,我们从
我目前正在开发一个 iOS Today 扩展,但我遇到了扩展高度的问题。我已经从头开始尝试了多次,但我似乎无法弄清楚额外高度的来源。 AutoLayout 哪里出错了。谢谢。 Storyboard V
理应如此 我们有一个今天的小部件,它最多显示 6 个按钮,具体取决于相应应用中的数据集。此数据使用应用程序组共享。如果至少配置了一个按钮,它将如上图所示显示。如果用户未登录,或者没有配置任何按钮,它将
我是一名优秀的程序员,十分优秀!