ios - EXC_BAD_ACCESS Using IBInspectable -
i trying use ibinspectable
add borders views.
extension uiview { private func getborder(integer: int) -> uirectedge { if integer == 1 { return .top } else if integer == 2 { return .left } else if integer == 3 { return .right } else if integer == 4 { return .bottom } return .all } @ibinspectable var border: int? { { return self.border } set (value) { self.border = value v in addborder(edges: self.getborder(integer: self.border!)) { self.addsubview(v) } } } @ibinspectable var bordercolor: uicolor? { { return self.bordercolor } set (value) { self.bordercolor = value //exc_bad_access here v in addborder(edges: self.getborder(integer: self.border!), color: bordercolor!) { self.addsubview(v) } } } private func addborder(edges: uirectedge, color: uicolor = uicolor.white, thickness: cgfloat = 1) -> [uiview] { ... } }
the crash occurs on line self.bordercolor = value
(in set
bordercolor
).
all says in debug log (lldb)
. crash says:
thread 1: exc_bad_access (code=2, address=0x7fff53cc5fe8)
here storyboard:
how can fix issue? thanks!
you have infinite recursion there, causing crash. within setter of bordercolor
you're calling setter same property, resulting infinite recursion.
this happens because class extensions not allowed have stored properties, swift doesn't generate backstore property, instead treats computed property, , calls setter whenever try set property.
there 2 solutions can think of @ time, solve problem:
- subclass uiview, add 2 properties there, update class in ib match name of new class.
- use associated objects in
uiview
accessors (objc_setassociatedobject()
/objc_getassociatedobject()
) instead of direct ivar reference. not need subclass , update xibs, solution little bit messier first one.
Comments
Post a Comment