我有一个小项目,它代表一个带有报告的应用程序,用户可以在其中绘制自定义报告CanvasView
然后选择绘制的每个涂鸦。当用户单击“保存”时UIButton
该报告将被序列化并保存在CoreData
。
当用户单击任何报告进行查看后,该报告将被带到DetailsVC
报告将从哪里反序列化CoreData
并且能够看到上面的涂鸦CanvasView
但不再画画了。
问题是没有向我展示上面的涂鸦CanvasView
(DetailsVC)但在控制台中说涂鸦数组不为空并且是从CoreData
.
编辑:我认为问题出在下面的行上,我认为正在遍历一个空数组并尝试附加CGPoints
但我不知道如何解决它。任何人都可以帮我实现这样的功能:
func parseScribbleData(_ bytes: [UInt8]) -> [[CGPoint]] {
}
https://github.com/tygruletz/SelectScribbles/blob/master/SelectScribbles/Communications/TTableDeserializer.swift#L34 https://github.com/tygruletz/SelectScribbles/blob/master/SelectScribbles/Communications/TTableDeserializer.swift#L34
这是我的演示项目:https://github.com/tygruletz/SelectScribbles https://github.com/tygruletz/SelectScribbles
Here is a record to reflect the bug (missing CGPoints from CanvasView
):
以下是我反序列化 Scribbles 的方法:
class TTableDeserializer: NSObject {
static let sharedInstance = TTableDeserializer()
// Deserialize all the damageItems recorded from the Report
func deserializeDamageItemsFor(report: DefectReport) -> [DamageItem] {
let damageLinesTTable: TTable = TTable(binaryTable: Data(), format: .bin1)
var damageItems: [DamageItem] = []
// Get the DamageList with damage items for selected Report.
damageLinesTTable.deStreamBin(binaryData: report.damageLines ?? Data(), format: .bin1)
damageLinesTTable.tableRows.forEach { row in
var damageItem: DamageItem = DamageItem(name: row.cell[0].sData,
scribbles: [])
// All Scribbles
var allCGPoints = [[CGPoint]]()
damageItem.scribbles.forEach { scribble in
var scribbleCGPoints = [CGPoint]()
scribble.forEach { coordinate in
let point = CGPoint(
x: CGFloat(UInt8(row.cell[3].iData())),
y: CGFloat(UInt8(row.cell[3].iData()) & (~0 >> 1))
)
scribbleCGPoints.append(point)
}
allCGPoints.append(scribbleCGPoints)
}
damageItem.scribbles = allCGPoints
damageItems.append(damageItem)
print("---------- DESERIALIZATION FOR DAMAGE ITEM '\(row.cell[0].sData.capitalized)' STARTED.......... ----------")
print("Dmg Item Name: \(row.cell[0].sData)")
print("Dmg Item Scribble: \(row.cell[1].binData())")
print("---------- DESERIALIZATION FOR DAMAGE ITEM '\(row.cell[0].sData.capitalized)' ENDED ----------\n\n")
}
return damageItems
}
}
感谢您阅读本文!