2016-08-17 8 views
0

これは何百万回も尋ねられたと確信しています。しかし、私の調査は、客観的な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)) 
     } 
    } 
} 
+0

メソッドを呼び出すビューコントローラを作成するコードを表示します。 – dan

+0

関数を追加しました。 –

+0

あなたは何をする必要がありますか?つまり、「画面を更新しますか?」ということは何ですか? 'ViewController'に移動しますか?あなたの 'getChatMessage'関数の現時点では、' ViewController'の新しいインスタンスを作成し、すぐにこの新しいインスタンスであなたのメソッドを呼び出します。これは機能しません。クラッシュしていなくても、結果は表示されません。 – Losiowaty

答えて

1

あなたは新しいViewControllerを初期化し、すぐにそれで何かをしようとしています。これはおそらくあなたが初心者であることを示すいくつかの理由で機能しません。 (歓迎!)UIViewControllerの動作(具体的にはライフサイクル)の仕組みや、オブジェクトの仕組みを見直す必要があります:)

+0

OPに違反することはありませんが、彼が両方をした場合、私は最高になると思います。 – Losiowaty

+0

おそらく...あまりにも多くを仮定したくなかった:) – PeejWeej

+0

私はそれを初期化することが間違っていたが、私は共有varビューを試みたが、それも失敗します。コントローラの外部からのビューの使用に関する良い文書はありません。これを行う簡単な方法がなければなりません。 –

関連する問題