2014-09-18 3 views
1

여기에 누락 된 부분이 확실하지 않지만 간단해야합니다. 내가하고 싶은 것은 업데이트 된 UITextField를 다른 ViewController에 전달하는 것뿐입니다.잃어 버렸습니다 ... UITextField를 다른 ViewController (Swift) (Xcode6)로 변경하려고 시도했습니다.

저는 ViewWillAppear에서 중요한 역할을하므로 생각하지 않습니다. 프로그래밍에 익숙하지 않으므로 전에이 작업을 시도한 적이 없습니다. 아래

코드 : 사용자가 원하는 웹 사이트를 입력하고 코드가 표시되는 위치를 핑크와 블루 뷰 컨트롤러가 어디
greyViewController입니다. 파란색과 분홍색보기 컨트롤러는 hexStringFromData 함수를 호출하여 웹 사이트를 코드로 변환합니다. 내가 뭘 놓치고 있니? 내가 IF 문을 놓치고있는 것처럼 느껴지지만 어디에 넣을 지 확신 할 수 없습니다.

greyViewController에 퍼팅하여 UITextfield를 다시 Singleton var aurl으로 설정하는 실험을했습니다. 너무 많은 코드를 게시하는 것이 좋지 않을 경우 유감이지만 실제로 무엇을하고 있는지 알지 못하므로 게시하지 않고 성취하려는 것을 설명하는 방법을 알지 못합니다.

import Foundation 
import UIKit 

var globalHttpUrl: NSURL! 
var aurl = NSString(string: "http://") 
var url = NSURL(string: "\(aurl)\(globalHttpUrl)") 

class SneakyViewController : UIViewController { 


override func viewWillAppear(animated: Bool) { 

    super.viewWillAppear(animated) 
    println(self.title) 

    func hexStringFromData(data: NSData) -> String { 
     var hexString = NSMutableString() 
     var buffer = [UInt8](count:data.length, repeatedValue:0) 
     data.getBytes(&buffer, length:data.length) 
     for var i=0; i<buffer.count; i++ { 
      if i % 4 == 0 && i != 0 { 
       hexString.appendString(" ") 
      } 
      hexString.appendFormat("%02x", buffer[i]) 
     } 
     return hexString 
    }  
} 

func hexStringFromData(data: NSData) -> String { 
    var hexString = NSMutableString() 
    var buffer = [UInt8](count:data.length, repeatedValue:0) 
    data.getBytes(&buffer, length:data.length) 
    for var i=0; i<buffer.count; i++ { 
     if i % 4 == 0 && i != 0 { 
      hexString.appendString(" ") 
     } 
     hexString.appendFormat("%02x", buffer[i]) 
    } 
    return hexString 
} 
} 

class PinkViewController : SneakyViewController { 

@IBOutlet weak var machineCode: UITextView! 

override func viewDidLoad() { 
    super.viewDidLoad() 

    let task = NSURLSession.sharedSession().dataTaskWithURL(url) {(data, response, error) in 

     var myText = NSString(data: data, encoding: NSASCIIStringEncoding) 

     dispatch_async(dispatch_get_main_queue()) { 

      self.machineCode.text = myText 

     } 
    } 

    //NSASCIIStringEncoding 
    task.resume() 

} 

override func viewWillAppear(animated: Bool) { 

    let task = NSURLSession.sharedSession().dataTaskWithURL(url) {(data, response, error) in 

     var myText = NSString(data: data, encoding: NSASCIIStringEncoding) 

     dispatch_async(dispatch_get_main_queue()) { 

      self.machineCode.text = myText 

     } 
    } 

    //NSASCIIStringEncoding 
    task.resume() 

}  
} 

class GreyViewController : SneakyViewController, UITextFieldDelegate { 

@IBOutlet var neoCodeView: UIView! 

@IBOutlet weak var userInput: UITextField! 

//var burl = NSString(string: "http://") 

@IBAction func buttonPressed(sender: AnyObject) { 
} 

override func viewDidLoad() { 
    super.viewDidLoad() 

userInput.clearsOnBeginEditing.description 
userInput.clearButtonMode = UITextFieldViewMode.WhileEditing 
} 

@IBAction func goToPinkViewController(sender: AnyObject) { 

    globalHttpUrl = NSURL(string: self.userInput.text) 

} 

override func touchesBegan(touches: NSSet, withEvent event: UIEvent) { 

    self.view.endEditing(true) 

} 

func textFieldShouldReturn(textField: UITextField) -> Bool { 
    userInput.resignFirstResponder() 
    return true 
} 

override func viewWillAppear(animated: Bool) { 

    func touchesBegan(touches: NSSet, withEvent event: UIEvent) { 

     self.view.endEditing(true) 

    } 

    func textFieldShouldReturn(textField: UITextField) -> Bool { 
     userInput.resignFirstResponder() 
     return true 
    } 

    userInput.clearsOnBeginEditing.description 
    userInput.clearButtonMode = UITextFieldViewMode.WhileEditing  

} 

} 

class BlueViewController : SneakyViewController { 

@IBOutlet weak var humanCode: UITextView! 

override func viewDidLoad() { 
    super.viewDidLoad() 

    let task = NSURLSession.sharedSession().dataTaskWithURL(url) {(data, response, error) in 
     var length = data.length 
     var chunkSize = 1024 * 10 
     var offset = 0 

     while offset < length { 
      var currentChunkSize = length - offset>chunkSize ? chunkSize : length - offset 
      var chunk = NSData(bytes: data.bytes + offset, length:currentChunkSize) 
      offset += currentChunkSize 
      var string = self.hexStringFromData(chunk) 
      dispatch_sync(dispatch_get_main_queue()) { 
       self.humanCode.text = self.humanCode.text + string 
      } 
     } 
    } 


    task.resume() 

} 

override func viewWillAppear(animated: Bool) { 



    let task = NSURLSession.sharedSession().dataTaskWithURL(url) {(data, response, error) in 

     var myText = NSString(data: data, encoding: NSASCIIStringEncoding) 

     dispatch_async(dispatch_get_main_queue()) { 

      self.humanCode.text = myText 

     } 
    } 

    //NSASCIIStringEncoding 
    task.resume() 

} 
} 

답변

0

나는이 문제가 귀하의 URL 선언에 있다고 생각합니다. 프로그램을 처음 실행할 때 인스턴스화되지만 globalHttpUrl이 업데이트 될 때 업데이트되지 않습니다. 아래 코드를 수정하면 작동 할 것입니다.

var url: NSURL { 
    get { 
     return NSURL(string: "\(aurl)\(globalHttpUrl)") 
    } 
} 
+0

get 명령은) 내가 NSURL = NSURL (URL을 설정 한 경우에도 나에게 오류를주고있다 {} 그래서 나는 didSet을하고 시도하고 내가 오류를하지 않는 동안 ViewControllers 아무것도 표시되지 않습니다 . 결코 어쩌면 내 구문이 엉망이되기 전에 didSet 또는 get 명령을 실행하지 마십시오 ... –

+0

죄송합니다.'='은 (는) 구문이 올바르지 않습니다. 내 솔루션을 업데이트하고 컴파일했음을 확인했습니다. – mtaylor

+0

대단히 감사합니다. 도움을 청합니다! getter/setter에 대한 추가 읽기를 했으므로 이것을 잊지 않을 것입니다. –

관련 문제