これは何百万回も尋ねられたと確信しています。しかし、私の調査は、客観的なCの解決策を考え出していました。他のクラスのUIView関数を使用するとクラッシュする
私は別のクラスからUIViewControllerクラスを呼び出しています。私は画面を更新したいと思います。 ViewControllerから関数が呼び出されると、正常に機能します。しかし、別のクラスから呼び出されると、次のようにクラッシュします。
tempImageView.image?.drawInRect(CGRect(x: 0, y: 0, width: self.view.frame.size.width, height: self.view.frame.size.height))
アンラップされたオプションがnilを返すと言っています。 tempImageViewは、UIViewController内のUIImageViewのコンセントです。私は、クラス外の関数呼び出しが実際にどのように機能するかについてはっきりしていないと思います。誰もがこのための解決策を知っていますか?
EDIT:
class ViewController: UIViewController, NSURLSessionDelegate {
var lastPoint = CGPoint.zero
var red: CGFloat = 0.0
var green: CGFloat = 0.0
var blue: CGFloat = 0.0
var brushWidth: CGFloat = 10.0
var opacity: CGFloat = 1.0
var swiped = false
var xArray = [CGFloat]()
var yArray = [CGFloat]()
var scale: CGFloat = 0.0
@IBOutlet weak var mainImageView: UIImageView!
@IBOutlet weak var tempImageView: UIImageView!
......
func drawLineFrom(fromPoint: CGPoint, toPoint: CGPoint) {
// 1
UIGraphicsBeginImageContext(self.view.frame.size)
let context = UIGraphicsGetCurrentContext()
tempImageView.image?.drawInRect(CGRect(x: 0, y: 0, width: self.view.frame.size.width, height: self.view.frame.size.height))
// 2
CGContextMoveToPoint(context, fromPoint.x, fromPoint.y)
CGContextAddLineToPoint(context, toPoint.x, toPoint.y)
// 3
CGContextSetLineCap(context, .Round)
CGContextSetLineWidth(context, brushWidth)
CGContextSetRGBStrokeColor(context, red, green, blue, 1.0)
CGContextSetBlendMode(context, .Normal)
// 4
CGContextStrokePath(context)
// 5
self.tempImageView.image = UIGraphicsGetImageFromCurrentImageContext()
self.tempImageView.alpha = opacity
UIGraphicsEndImageContext()
}
そして、他のコントローラからの呼び出し
func getChatMessage() {
socket.on("browser") { (dataArray, socketAck) -> Void in
for _ in dataArray {
ViewController().drawLineFrom(CGPoint(x: 0,y: 0), toPoint: CGPoint(x: 1,y: 1))
}
}
}
メソッドを呼び出すビューコントローラを作成するコードを表示します。 – dan
関数を追加しました。 –
あなたは何をする必要がありますか?つまり、「画面を更新しますか?」ということは何ですか? 'ViewController'に移動しますか?あなたの 'getChatMessage'関数の現時点では、' ViewController'の新しいインスタンスを作成し、すぐにこの新しいインスタンスであなたのメソッドを呼び出します。これは機能しません。クラッシュしていなくても、結果は表示されません。 – Losiowaty