获取时间线后,iOS 14 小部件扩展程序崩溃

RTa*_*che 5 widget ios swift

我正在实现一个小部件扩展,当完成句柄被调用时它会随机崩溃。抛出异常 "-[NSConcreteFileHandle fileDescriptor]: Invalid argument"

这是我的实现:

func getTimeline(in context: Context, completion: @escaping (Timeline<Entry>) -> ()) {

    let countArticles = self.countArticles(dependingOn: context.family)

    self.backendService.fetchArticles(countArticles: countArticles) { [weak self] (result) in

        let secondsUntilNextRefresh = TimeInterval(10 * 60)
        let dateToInvokeNextRefresh = Date().addingTimeInterval(secondsUntilNextRefresh)
        let timelineEntries = TimelineMapper().mapArticlesResultToTimelineEntry(result)
        let timeline = Timeline(entries: timelineEntries,
                                policy: .after(dateToInvokeNextRefresh))

        DispatchQueue.main.async {

            completion(timeline)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

和堆栈跟踪

#0  0x00007fff20177f48 in objc_exception_throw ()
#1  0x00007fff2078b731 in _NSFileHandleRaiseOperationExceptionWhileReading ()
#2  0x00007fff2078adb1 in _NSFileHandleRaiseOperationException ()
#3  0x00007fff2078ada6 in -[NSConcreteFileHandle fileDescriptor] ()
#4  0x00007fff55c32ad4 in FileArchiveWriter.appendBytes(_:size:) ()
#5  0x00007fff55c32d06 in FileArchiveWriter.append<A>(_:) ()
#6  0x00007fff55c3222f in ArchiveWriter.addAttachment(data:) ()
#7  0x00007fff55c34086 in Encoder.encodeAttachedValue<A>(key:data:) ()
#8  0x00007fff55ff0a96 in CodableCGImage.encode(to:) ()
#9  0x00007fff55ff0eed in protocol witness for Encodable.encode(to:) in conformance CodableCGImage ()
#10 0x00007fff2f381907 in dispatch thunk of Encodable.encode(to:) ()
#11 0x00007fff536a0f98 in __PlistEncoder.box_<A>(_:) ()
#12 0x00007fff536a22c9 in _PlistKeyedEncodingContainer.encode<A>(_:forKey:) ()
#13 0x00007fff536a33e5 in protocol witness for KeyedEncodingContainerProtocol.encode<A>(_:forKey:) in conformance _PlistKeyedEncodingContainer<A> ()
#14 0x00007fff2f0ddae7 in _KeyedEncodingContainerBox.encode<A, B>(_:forKey:) ()
#15 0x00007fff2f0d4a74 in KeyedEncodingContainer.encode<A>(_:forKey:) ()
#16 0x00007fff55a81c02 in GraphicsImage.encode(to:) ()
#17 0x00007fff55a826e9 in protocol witness for Encodable.encode(to:) in conformance GraphicsImage ()
#18 0x00007fff2f381907 in dispatch thunk of Encodable.encode(to:) ()
#19 0x00007fff536a0f98 in __PlistEncoder.box_<A>(_:) ()
#20 0x00007fff536a22c9 in _PlistKeyedEncodingContainer.encode<A>(_:forKey:) ()
#21 0x00007fff536a33e5 in protocol witness for KeyedEncodingContainerProtocol.encode<A>(_:forKey:) in conformance _PlistKeyedEncodingContainer<A> ()
#22 0x00007fff2f0ddae7 in _KeyedEncodingContainerBox.encode<A, B>(_:forKey:) ()
#23 0x00007fff2f0d4a74 in KeyedEncodingContainer.encode<A>(_:forKey:) ()
#24 0x00007fff560b0669 in DisplayList.Content.Value.encode(to:) ()
#25 0x00007fff56005d6d in protocol witness for Encodable.encode(to:) in conformance DisplayList.Content.Value ()
#26 0x00007fff2f381907 in dispatch thunk of Encodable.encode(to:) ()
#27 0x00007fff536a0f98 in __PlistEncoder.box_<A>(_:) ()
#28 0x00007fff536a22c9 in _PlistKeyedEncodingContainer.encode<A>(_:forKey:) ()
#29 0x00007fff536a33e5 in protocol witness for KeyedEncodingContainerProtocol.encode<A>(_:forKey:) in conformance _PlistKeyedEncodingContainer<A> ()
#30 0x00007fff2f0ddae7 in _KeyedEncodingContainerBox.encode<A, B>(_:forKey:) ()
#31 0x00007fff2f0d4a74 in KeyedEncodingContainer.encode<A>(_:forKey:) ()
#32 0x00007fff56006159 in DisplayList.Content.encode(to:) ()
#33 0x00007fff56006341 in protocol witness for Encodable.encode(to:) in conformance DisplayList.Content ()
#34 0x00007fff2f381907 in dispatch thunk of Encodable.encode(to:) ()
#35 0x00007fff536a0f98 in __PlistEncoder.box_<A>(_:) ()
#36 0x00007fff536a22c9 in _PlistKeyedEncodingContainer.encode<A>(_:forKey:) ()
#37 0x00007fff536a33e5 in protocol witness for KeyedEncodingContainerProtocol.encode<A>(_:forKey:) in conformance _PlistKeyedEncodingContainer<A> ()
#38 0x00007fff2f0ddae7 in _KeyedEncodingContainerBox.encode<A, B>(_:forKey:) ()
#39 0x00007fff2f0d4a74 in KeyedEncodingContainer.encode<A>(_:forKey:) ()
#40 0x00007fff560af5d8 in DisplayList.Item.Value.encode(to:) ()
#41 0x00007fff56005ce9 in protocol witness for Encodable.encode(to:) in conformance DisplayList.Item.Value ()
#42 0x00007fff2f381907 in dispatch thunk of Encodable.encode(to:) ()
#43 0x00007fff536a0f98 in __PlistEncoder.box_<A>(_:) ()
#44 0x00007fff536a22c9 in _PlistKeyedEncodingContainer.encode<A>(_:forKey:) ()
#45 0x00007fff536a33e5 in protocol witness for KeyedEncodingContainerProtocol.encode<A>(_:forKey:) in conformance _PlistKeyedEncodingContainer<A> ()
#46 0x00007fff2f0ddae7 in _KeyedEncodingContainerBox.encode<A, B>(_:forKey:) ()
#47 0x00007fff2f0d4a74 in KeyedEncodingContainer.encode<A>(_:forKey:) ()
#48 0x00007fff560afaef in DisplayList.Item.encode(to:) ()
#49 0x00007fff56005d39 in protocol witness for Encodable.encode(to:) in conformance DisplayList.Item ()
#50 0x00007fff2f381907 in dispatch thunk of Encodable.encode(to:) ()
#51 0x00007fff536a0f98 in __PlistEncoder.box_<A>(_:) ()
#52 0x00007fff536a39b7 in _PlistUnkeyedEncodingContainer.encode<A>(_:) ()
#53 0x00007fff536a4b49 in protocol witness for UnkeyedEncodingContainer.encode<A>(_:) in conformance _PlistUnkeyedEncodingContainer ()
#54 0x00007fff2f0ecf88 in Array<A>.encode(to:) ()
#55 0x00007fff2f0ed0e8 in protocol witness for Encodable.encode(to:) in conformance <A> [A] ()
#56 0x00007fff2f381907 in dispatch thunk of Encodable.encode(to:) ()
#57 0x00007fff536a0f98 in __PlistEncoder.box_<A>(_:) ()
#58 0x00007fff536a22c9 in _PlistKeyedEncodingContainer.encode<A>(_:forKey:) ()
#59 0x00007fff536a33e5 in protocol witness for KeyedEncodingContainerProtocol.encode<A>(_:forKey:) in conformance _PlistKeyedEncodingContainer<A> ()
#60 0x00007fff2f0ddae7 in _KeyedEncodingContainerBox.encode<A, B>(_:forKey:) ()
#61 0x00007fff2f0d4a74 in KeyedEncodingContainer.encode<A>(_:forKey:) ()
#62 0x00007fff560af15e in DisplayList.encode(to:) ()
#63 0x00007fff56005cc1 in protocol witness for Encodable.encode(to:) in conformance DisplayList ()
#64 0x00007fff2f381907 in dispatch thunk of Encodable.encode(to:) ()
#65 0x00007fff536a0f98 in __PlistEncoder.box_<A>(_:) ()
#66 0x00007fff536a22c9 in _PlistKeyedEncodingContainer.encode<A>(_:forKey:) ()
#67 0x00007fff536a33e5 in protocol witness for KeyedEncodingContainerProtocol.encode<A>(_:forKey:) in conformance _PlistKeyedEncodingContainer<A> ()
#68 0x00007fff2f0ddae7 in _KeyedEncodingContainerBox.encode<A, B>(_:forKey:) ()
#69 0x00007fff2f0d4a74 in KeyedEncodingContainer.encode<A>(_:forKey:) ()
#70 0x00007fff560af5d8 in DisplayList.Item.Value.encode(to:) ()
#71 0x00007fff56005ce9 in protocol witness for Encodable.encode(to:) in conformance DisplayList.Item.Value ()
#72 0x00007fff2f381907 in dispatch thunk of Encodable.encode(to:) ()
#73 0x00007fff536a0f98 in __PlistEncoder.box_<A>(_:) ()
#74 0x00007fff536a22c9 in _PlistKeyedEncodingContainer.encode<A>(_:forKey:) ()
#75 0x00007fff536a33e5 in protocol witness for KeyedEncodingContainerProtocol.encode<A>(_:forKey:) in conformance _PlistKeyedEncodingContainer<A> ()
#76 0x00007fff2f0ddae7 in _KeyedEncodingContainerBox.encode<A, B>(_:forKey:) ()
#77 0x00007fff2f0d4a74 in KeyedEncodingContainer.encode<A>(_:forKey:) ()
#78 0x00007fff560afaef in DisplayList.Item.encode(to:) ()
#79 0x00007fff56005d39 in protocol witness for Encodable.encode(to:) in conformance DisplayList.Item ()
#80 0x00007fff2f381907 in dispatch thunk of Encodable.encode(to:) ()
#81 0x00007fff536a0f98 in __PlistEncoder.box_<A>(_:) ()
#82 0x00007fff536a39b7 in _PlistUnkeyedEncodingContainer.encode<A>(_:) ()
#83 0x00007fff536a4b49 in protocol witness for UnkeyedEncodingContainer.encode<A>(_:) in conformance _PlistUnkeyedEncodingContainer ()
#84 0x00007fff2f0ecf88 in Array<A>.encode(to:) ()
#85 0x00007fff2f0ed0e8 in protocol witness for Encodable.encode(to:) in conformance <A> [A] ()
#86 0x00007fff2f381907 in dispatch thunk of Encodable.encode(to:) ()
#87 0x00007fff536a0f98 in __PlistEncoder.box_<A>(_:) ()
#88 0x00007fff536a22c9 in _PlistKeyedEncodingContainer.encode<A>(_:forKey:) ()
#89 0x00007fff536a33e5 in protocol witness for KeyedEncodingContainerProtocol.encode<A>(_:forKey:) in conformance _PlistKeyedEncodingContainer<A> ()
#90 0x00007fff2f0ddae7 in _KeyedEncodingContainerBox.encode<A, B>(_:forKey:) ()
#91 0x00007fff2f0d4a74 in KeyedEncodingContainer.encode<A>(_:forKey:) ()
#92 0x00007fff560af15e in DisplayList.encode(to:) ()
#93 0x00007fff56005cc1 in protocol witness for Encodable.encode(to:) in conformance DisplayList ()
#94 0x00007fff2f381907 in dispatch thunk of Encodable.encode(to:) ()
#95 0x00007fff536a0f98 in __PlistEncoder.box_<A>(_:) ()
#96 0x00007fff536a22c9 in _PlistKeyedEncodingContainer.encode<A>(_:forKey:) ()
#97 0x00007fff536a33e5 in protocol witness for KeyedEncodingContainerProtocol.encode<A>(_:forKey:) in conformance _PlistKeyedEncodingContainer<A> ()
#98 0x00007fff2f0ddae7 in _KeyedEncodingContainerBox.encode<A, B>(_:forKey:) ()
#99 0x00007fff2f0d4a74 in KeyedEncodingContainer.encode<A>(_:forKey:) ()
#100    0x00007fff560af5d8 in DisplayList.Item.Value.encode(to:) ()
#101    0x00007fff56005ce9 in protocol witness for Encodable.encode(to:) in conformance DisplayList.Item.Value ()
#102    0x00007fff2f381907 in dispatch thunk of Encodable.encode(to:) ()
#103    0x00007fff536a0f98 in __PlistEncoder.box_<A>(_:) ()
#104    0x00007fff536a22c9 in _PlistKeyedEncodingContainer.encode<A>(_:forKey:) ()
#105    0x00007fff536a33e5 in protocol witness for KeyedEncodingContainerProtocol.encode<A>(_:forKey:) in conformance _PlistKeyedEncodingContainer<A> ()
#106    0x00007fff2f0ddae7 in _KeyedEncodingContainerBox.encode<A, B>(_:forKey:) ()
#107    0x00007fff2f0d4a74 in KeyedEncodingContainer.encode<A>(_:forKey:) ()
#108    0x00007fff560afaef in DisplayList.Item.encode(to:) ()
#109    0x00007fff56005d39 in protocol witness for Encodable.encode(to:) in conformance DisplayList.Item ()
#110    0x00007fff2f381907 in dispatch thunk of Encodable.encode(to:) ()
#111    0x00007fff536a0f98 in __PlistEncoder.box_<A>(_:) ()
#112    0x00007fff536a39b7 in _PlistUnkeyedEncodingContainer.encode<A>(_:) ()
#113    0x00007fff536a4b49 in protocol witness for UnkeyedEncodingContainer.encode<A>(_:) in conformance _PlistUnkeyedEncodingContainer ()
#114    0x00007fff2f0ecf88 in Array<A>.encode(to:) ()
#115    0x00007fff2f0ed0e8 in protocol witness for Encodable.encode(to:) in conformance <A> [A] ()
#116    0x00007fff2f381907 in dispatch thunk of Encodable.encode(to:) ()
#117    0x00007fff536a0f98 in __PlistEncoder.box_<A>(_:) ()
#118    0x00007fff536a22c9 in _PlistKeyedEncodingContainer.encode<A>(_:forKey:) ()
#119    0x00007fff536a33e5 in protocol witness for KeyedEncodingContainerProtocol.encode<A>(_:forKey:) in conformance _PlistKeyedEncodingContainer<A> ()
#120    0x00007fff2f0ddae7 in _KeyedEncodingContainerBox.encode<A, B>(_:forKey:) ()
#121    0x00007fff2f0d4a74 in KeyedEncodingContainer.encode<A>(_:forKey:) ()
#122    0x00007fff560af15e in DisplayList.encode(to:) ()
#123    0x00007fff56005cc1 in protocol witness for Encodable.encode(to:) in conformance DisplayList ()
#124    0x00007fff2f381907 in dispatch thunk of Encodable.encode(to:) ()
#125    0x00007fff536a0f98 in __PlistEncoder.box_<A>(_:) ()
#126    0x00007fff536a22c9 in _PlistKeyedEncodingContainer.encode<A>(_:forKey:) ()
#127    0x00007fff536a33e5 in protocol witness for KeyedEncodingContainerProtocol.encode<A>(_:forKey:) in conformance _PlistKeyedEncodingContainer<A> ()
#128    0x00007fff2f0ddae7 in _KeyedEncodingContainerBox.encode<A, B>(_:forKey:) ()
#129    0x00007fff2f0d4a74 in KeyedEncodingContainer.encode<A>(_:forKey:) ()
#130    0x00007fff560af5d8 in DisplayList.Item.Value.encode(to:) ()
#131    0x00007fff56005ce9 in protocol witness for Encodable.encode(to:) in conformance DisplayList.Item.Value ()
#132    0x00007fff2f381907 in dispatch thunk of Encodable.encode(to:) ()
#133    0x00007fff536a0f98 in __PlistEncoder.box_<A>(_:) ()
#134    0x00007fff536a22c9 in _PlistKeyedEncodingContainer.encode<A>(_:forKey:) ()
#135    0x00007fff536a33e5 in protocol witness for KeyedEncodingContainerProtocol.encode<A>(_:forKey:) in conformance _PlistKeyedEncodingContainer<A> ()
#136    0x00007fff2f0ddae7 in _KeyedEncodingContainerBox.encode<A, B>(_:forKey:) ()
#137    0x00007fff2f0d4a74 in KeyedEncodingContainer.encode<A>(_:forKey:) ()
#138    0x00007fff560afaef in DisplayList.Item.encode(to:) ()
#139    0x00007fff56005d39 in protocol witness for Encodable.encode(to:) in conformance DisplayList.Item ()
#140    0x00007fff2f381907 in dispatch thunk of Encodable.encode(to:) ()
#141    0x00007fff536a0f98 in __PlistEncoder.box_<A>(_:) ()
#142    0x00007fff536a39b7 in _PlistUnkeyedEncodingContainer.encode<A>(_:) ()
#143    0x00007fff536a4b49 in protocol witness for UnkeyedEncodingContainer.encode<A>(_:) in conformance _PlistUnkeyedEncodingContainer ()
#144    0x00007fff2f0ecf88 in Array<A>.encode(to:) ()
#145    0x00007fff2f0ed0e8 in protocol witness for Encodable.encode(to:) in conformance <A> [A] ()
#146    0x00007fff2f381907 in dispatch thunk of Encodable.encode(to:) ()
#147    0x00007fff536a0f98 in __PlistEncoder.box_<A>(_:) ()
#148    0x00007fff536a22c9 in _PlistKeyedEncodingContainer.encode<A>(_:forKey:) ()
#149    0x00007fff536a33e5 in protocol witness for KeyedEncodingContainerProtocol.encode<A>(_:forKey:) in conformance _PlistKeyedEncodingContainer<A> ()
#150    0x00007fff2f0ddae7 in _KeyedEncodingContainerBox.encode<A, B>(_:forKey:) ()
#151    0x00007fff2f0d4a74 in KeyedEncodingContainer.encode<A>(_:forKey:) ()
#152    0x00007fff560af15e in DisplayList.encode(to:) ()
#153    0x00007fff56005cc1 in protocol witness for Encodable.encode(to:) in conformance DisplayList ()
#154    0x00007fff2f381907 in dispatch thunk of Encodable.encode(to:) ()
#155    0x00007fff536a0f98 in __PlistEncoder.box_<A>(_:) ()
#156    0x00007fff536a22c9 in _PlistKeyedEncodingContainer.encode<A>(_:forKey:) ()
#157    0x00007fff536a33e5 in protocol witness for KeyedEncodingContainerProtocol.encode<A>(_:forKey:) in conformance _PlistKeyedEncodingContainer<A> ()
#158    0x00007fff2f0ddae7 in _KeyedEncodingContainerBox.encode<A, B>(_:forKey:) ()
#159    0x00007fff2f0d4a74 in KeyedEncodingContainer.encode<A>(_:forKey:) ()
#160    0x00007fff560af5d8 in DisplayList.Item.Value.encode(to:) ()
#161    0x00007fff56005ce9 in protocol witness for Encodable.encode(to:) in conformance DisplayList.Item.Value ()
#162    0x00007fff2f381907 in dispatch thunk of Encodable.encode(to:) ()
#163    0x00007fff536a0f98 in __PlistEncoder.box_<A>(_:) ()
#164    0x00007fff536a22c9 in _PlistKeyedEncodingContainer.encode<A>(_:forKey:) ()
#165    0x00007fff536a33e5 in protocol witness for KeyedEncodingContainerProtocol.encode<A>(_:forKey:) in conformance _PlistKeyedEncodingContainer<A> ()
#166    0x00007fff2f0ddae7 in _KeyedEncodingContainerBox.encode<A, B>(_:forKey:) ()
#167    0x00007fff2f0d4a74 in KeyedEncodingContainer.encode<A>(_:forKey:) ()
#168    0x00007fff560afaef in DisplayList.Item.encode(to:) ()
#169    0x00007fff56005d39 in protocol witness for Encodable.encode(to:) in conformance DisplayList.Item ()
#170    0x00007fff2f381907 in dispatch thunk of Encodable.encode(to:) ()
#171    0x00007fff536a0f98 in __PlistEncoder.box_<A>(_:) ()
#172    0x00007fff536a39b7 in _PlistUnkeyedEncodingContainer.encode<A>(_:) ()
#173    0x00007fff536a4b49 in protocol witness for UnkeyedEncodingContainer.encode<A>(_:) in conformance _PlistUnkeyedEncodingContainer ()
#174    0x00007fff2f0ecf88 in Array<A>.encode(to:) ()
#175    0x00007fff2f0ed0e8 in protocol witness for Encodable.encode(to:) in conformance <A> [A] ()
#176    0x00007fff2f381907 in dispatch thunk of Encodable.encode(to:) ()
#177    0x00007fff536a0f98 in __PlistEncoder.box_<A>(_:) ()
#178    0x00007fff536a22c9 in _PlistKeyedEncodingContainer.encode<A>(_:forKey:) ()
#179    0x00007fff536a33e5 in protocol witness for KeyedEncodingContainerProtocol.encode<A>(_:forKey:) in conformance _PlistKeyedEncodingContainer<A> ()
#180    0x00007fff2f0ddae7 in _KeyedEncodingContainerBox.encode<A, B>(_:forKey:) ()
#181    0x00007fff2f0d4a74 in KeyedEncodingContainer.encode<A>(_:forKey:) ()
#182    0x00007fff560af15e in DisplayList.encode(to:) ()
#183    0x00007fff56005cc1 in protocol witness for Encodable.encode(to:) in conformance DisplayList ()
#184    0x00007fff2f381907 in dispatch thunk of Encodable.encode(to:) ()
#185    0x00007fff536a0f98 in __PlistEncoder.box_<A>(_:) ()
#186    0x00007fff536a22c9 in _PlistKeyedEncodingContainer.encode<A>(_:forKey:) ()
#187    0x00007fff536a33e5 in protocol witness for KeyedEncodingContainerProtocol.encode<A>(_:forKey:) in conformance _PlistKeyedEncodingContainer<A> ()
#188    0x00007fff2f0ddae7 in _KeyedEncodingContainerBox.encode<A, B>(_:forKey:) ()
#189    0x00007fff2f0d4a74 in KeyedEncodingContainer.encode<A>(_:forKey:) ()
#190    0x00007fff560af5d8 in DisplayList.Item.Value.encode(to:) ()
#191    0x00007fff56005ce9 in protocol witness for Encodable.encode(to:) in conformance DisplayList.Item.Value ()
#192    0x00007fff2f381907 in dispatch thunk of Encodable.encode(to:) ()
#193    0x00007fff536a0f98 in __PlistEncoder.box_<A>(_:) ()
#194    0x00007fff536a22c9 in _PlistKeyedEncodingContainer.encode<A>(_:forKey:) ()
#195    0x00007fff536a33e5 in protocol witness for KeyedEncodingContainerProtocol.encode<A>(_:forKey:) in conformance _PlistKeyedEncodingContainer<A> ()
#196    0x00007fff2f0ddae7 in _KeyedEncodingContainerBox.encode<A, B>(_:forKey:) ()
#197    0x00007fff2f0d4a74 in KeyedEncodingContainer.encode<A>(_:forKey:) ()
#198    0x00007fff560afaef in DisplayList.Item.encode(to:) ()
#199    0x00007fff56005d39 in protocol witness for Encodable.encode(to:) in conformance DisplayList.Item ()
#200    0x00007fff2f381907 in dispatch thunk of Encodable.encode(to:) ()
#201    0x00007fff536a0f98 in __PlistEncoder.box_<A>(_:) ()
#202    0x00007fff536a39b7 in _PlistUnkeyedEncodingContainer.encode<A>(_:) ()
#203    0x00007fff536a4b49 in protocol witness for UnkeyedEncodingContainer.encode<A>(_:) in conformance _PlistUnkeyedEncodingContainer ()
#204    0x00007fff2f0ecf88 in Array<A>.encode(to:) ()
#205    0x00007fff2f0ed0e8 in protocol witness for Encodable.encode(to:) in conformance <A> [A] ()
#206    0x00007fff2f381907 in dispatch thunk of Encodable.encode(to:) ()
#207    0x00007fff536a0f98 in __PlistEncoder.box_<A>(_:) ()
#208    0x00007fff536a22c9 in _PlistKeyedEncodingContainer.encode<A>(_:forKey:) ()
#209    0x00007fff536a33e5 in protocol witness for KeyedEncodingContainerProtocol.encode<A>(_:forKey:) in conformance _PlistKeyedEncodingContainer<A> ()
#210    0x00007fff2f0ddae7 in _KeyedEncodingContainerBox.encode<A, B>(_:forKey:) ()
#211    0x00007fff2f0d4a74 in KeyedEncodingContainer.encode<A>(_:forKey:) ()
#212    0x00007fff560af15e in DisplayList.encode(to:) ()
#213    0x00007fff56005cc1 in protocol witness for Encodable.encode(to:) in conformance DisplayList ()
#214    0x00007fff2f381907 in dispatch thunk of Encodable.encode(to:) ()
#215    0

RTa*_*che 3

我在实施中发现了一个问题BackendService。为了确保对于两个或多个后续调用,getTimeline()仅调用一个请求,我对完成处理程序进行了排队。这确保了请求完成后调用所有完成处理程序。我从未注意到任何问题,因为调试时调用的次数getTimeline()始终与处理程序调用的次数匹配。completion当时间线在传递后重新加载时,一定会发生崩溃,dateToInvokeNextRefresh因为在这种情况下,completion传递到的实际处理程序getTimeline() 先前排队的完成处理程序已被调用。确保请求完成后释放所有完成处理程序解决了我的问题,并且崩溃现在消失了。

另一件值得一提的是,崩溃也可能与自定义字体有关。我发现这篇文章iOS 14 Widget is flickering or freeze, chronod crashing描述了与我的类似的崩溃堆栈跟踪。