Mik*_*imz 5 arrays sorting xcode ios swift
在对数组进行排序时,我遇到间歇性崩溃,并且无法按需重现它,也无法解决该问题。这是崩溃的情况:
Crashed: com.apple.root.background-qos XC_BAD_ACCESS KERN_INVALID_ADDRESS 0x003400010efebbe8
specialized Array._createNewBuffer(bufferIsUnique:minimumCapacity:growForAppend:) + 4341522208
请参阅下面我认为导致崩溃的代码(我认为这是一个线程问题),我相信它正在发生。任何有关此事的帮助将不胜感激!我已经为这个问题苦苦挣扎了好几天了。如果您需要任何进一步的信息,请告诉我。提前致谢:
func getPopCultureNews(completion: @escaping () -> Void) {
let group = DispatchGroup()
var items = [NewsItem]()
for feed in NewsManager.shared.popCultureFeedUrls {
group.enter()
if let feedURL = URL(string: feed) {
let parser = FeedParser(URL: feedURL)
parser.parseAsync(queue: .global(qos: .background)) { (result) in
switch result {
case .success(let feed):
switch feed {
case let .atom(feed):
if let entries = feed.entries {
entries.forEach { (entry) in
let item = NewsItem(atomEntry: entry, rssEntry: nil, jsonEntry: nil)
if item.hasImage() {
items.append(item)
}
}
}
case let .rss(feed):
if let entries = feed.items {
entries.forEach { (entry) in
let item = NewsItem(atomEntry: nil, rssEntry: entry, jsonEntry: nil)
if item.hasImage() {
items.append(item)
}
}
}
case let .json(feed):
if let entries = feed.items {
entries.forEach { (entry) in
let item = NewsItem(atomEntry: nil, rssEntry: nil, jsonEntry: entry)
if item.hasImage() {
items.append(item)
}
}
}
}
case .failure(let error):
print(error)
}
items = items.sorted(by: { $0.getPublishedDate().compare($1.getPublishedDate()) == .orderedDescending })
group.leave()
}
}
}
group.notify(queue: DispatchQueue.global(qos: .background)) {
NewsManager.shared.popCultureItems = items
completion()
}
}
Run Code Online (Sandbox Code Playgroud)
小智 0
看起来var items = [NewsItem]()应该是线程安全的。查看此内容以了解更多详细信息在 Swift 中创建线程安全数组
另外,我建议您进行一次排序,例如在 中group.notify,而不是在每次迭代中排序。
| 归档时间: |
|
| 查看次数: |
2648 次 |
| 最近记录: |