更新:我尝试将时间轴上的策略设置为.atEnd
,因为只有一个条目。这并没有什么不同。我在 RSS Parser 文件和 AppDelegate 中都尝试过运行 WidgetCenterreloadAllTimeLines
方法,但它也什么也没做。这让我发疯了,我将不得不使用开发人员支持票来解决这个问题。
我正在慢慢地让我的应用程序为一些 iOS 14 功能做好准备,但不断遇到一个又一个错误,或者(更可能)我没有正确地做事。我正在尽我所能来更新小部件,但它不会。小部件本身很简单;它显示来自 RSS 提要的最新条目的标题和一些文本。我构建了一个 XMLParser,这段代码在时间轴上运行:
struct Provider: TimelineProvider {
@State private var rssItems:[RSSItem]?
let feedParser = FeedParser()
func placeholder(in context: Context) -> SimpleEntry {
SimpleEntry(date: Date(), title:"News", description: "News article here", link: "Http://link", pubDate: "The day it posted")
}
func getSnapshot(in context: Context, completion: @escaping (SimpleEntry) -> ()) {
let entry = SimpleEntry(date: Date(), title:"News", description: "News Article Here", link: "Http://link", pubDate: "The day it posted")
completion(entry)
}
func getTimeline(in context: Context, completion: @escaping (Timeline<SimpleEntry>) -> ()) {
WidgetCenter.shared.reloadAllTimelines()
var entries: [SimpleEntry] = []
feedParser.parseFeed(url: "https://fritchcoc.wordpress.com/feed") {(rssItems) in
self.rssItems = rssItems
let currentDate = Date()
let string1 = "Latest News: \n\n"
let string2 = rssItems[0].title
var appendString1 = string1+string2
let entry = SimpleEntry(date: currentDate, title:appendString1, description: rssItems[0].description, link: rssItems[0].link, pubDate: rssItems[0].pubDate)
entries.append(entry)
let refreshDate = Calendar.current.date(byAdding: .minute, value: 2, to: Date())!
let timeline = Timeline(entries: entries, policy: .after(refreshDate))
completion(timeline)
}
}
}
当您第一次安装小部件时,它会正确显示最新的新闻项目。但是,我在 RSS 提要中添加了更多条目以对其进行测试,并且它从不更新以显示这些更改,仅显示安装时的新内容。我安装在第二台设备上,在第二台设备上,它确实显示了我为测试添加的新设备,所以我知道它在解析器端和 RSS 本身上工作正常。