2013-03-14 1 views
1

저는 Ruby/MacRuby를 처음 사용합니다. 나는 MacRuby 웹 사이트의 스톱워치 예제를 따라 갔고,이 예제를 사용하여 6 개의 작은 텍스트 필드를 취한 다음 더 큰 다른 텍스트 필드에 입력을 표시하는 간단한 응용 프로그램을 만들었습니다. 나는 예MacRuby 텍스트 필드 액세스/업데이트

class AppDelegate 

    attr_accessor :window 

    attr_accessor :subjectField, :messageField, :emailTo, :emailFrom, :smtpServerAddress, :smtpPort, :password 

    attr_writer :subjectField, :messageField, :emailTo, :emailFrom, :smtpServerAddress, :smtpPort, :password 

    def setMessageField(sender) 
     @messageField += "SMTP Server Address: #{@smtpServerAddress.to_s}\n") 
     @messageField += "SMTP Port: #{@smtpPort.to_s}\n") 
     @messageField += "User Email: #{@emailFrom.to_s}\n") 
     @messageField += "User Password: #{@password.to_s}\n") 
     @messageField += "To Email: #{@emailTo.to_s}\n") 
     @messageField += "Subject: #{@subjectField.to_s}\n") 
    end 

end 

을 (모호하고 매우 끔찍하게 문서화 있지만) 분명히 거기에 뭔가 문제가 여기에있다하지만 그 누구도 날 올바른 방향으로 힌트를 줄 수있는 몇 가지를 발견? 나는 여기에 this 게시물을 보았지만 잘 이해하지 못했습니다.

답변

0

을 나타냈다. setMessageField 메서드 내에서 += 연산자가 올바르지 않습니다. 그래서 그것을 다음과 같이 변경해야했습니다. 메서드 이름을 btw로 변경했습니다.

attr_accessor :window 
attr_accessor :subjectField, :messageField, :emailTo, :emailFrom, :smtpServerAddress, :smtpPort, :password 

def setText(sender) 
    @messageField.stringValue = "SMTP Server Address: #{@smtpServerAddress.stringValue}\n" 
    @messageField.stringValue = "#{@messageField.stringValue}SMTP Port: #{@smtpPort.stringValue}\n" 
    @messageField.stringValue = "#{@messageField.stringValue}User Email: #{@emailFrom.stringValue}\n" 
    @messageField.stringValue = "#{@messageField.stringValue}User Password: #{@password.stringValue}\n" 
    @messageField.stringValue = "#{@messageField.stringValue}To Email: #{@emailTo.stringValue}" 
    @messageField.stringValue = "#{@messageField.stringValue}Subject: #{@subjectField.stringValue}\n" 
end 

지금은 매력처럼 작동합니다.

0

IBOutlets가 연결되어 있고 그 매장의 모든 NSTextFields있는 것을 가정하면,이 시도 : 무슨 일이 있었는지

class AppDelegate 
    attr_accessor :window 
    attr_accessor :subjectField, :messageField, :emailTo, :emailFrom, :smtpServerAddress, :smtpPort, :password 

    def setMessageField(sender) 
     @messageField.stringValue += "SMTP Server Address: #{@smtpServerAddress.stringValue}\n" 
     @messageField.stringValue += "SMTP Port: #{@smtpPort.stringValue}\n" 
     @messageField.stringValue += "User Email: #{@emailFrom.stringValue}\n" 
     @messageField.stringValue += "User Password: #{@password.stringValue}\n" 
     @messageField.stringValue += "To Email: #{@emailTo.stringValue}\n" 
     @messageField.stringValue += "Subject: #{@subjectField.stringValue}\n" 
    end 
end 
+0

'setMessageField'오류 메시지 : nil : NilClass (NoMethodError)의 정의되지 않은 메소드 'stringValue' – pattmorter

+0

setMessageField :에 사용 된 모든 인스턴스 변수가 Interface Builder에서 대체로 할당되는지 확인하십시오. 초시계 예제의 "텍스트 필드 콘센트 연결"단원을 참조하십시오. – jtomschroeder

+0

나는 그것을 따라 모든 것을 연결했지만 여전히 작동하지 않습니다. – pattmorter