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»: undefined method «stringValue» для nil: NilClass (NoMethodError) ' – pattmorter

+0

Убедитесь, что все переменные экземпляра, используемые в setMessageField: где-то назначаются - скорее всего, в Interface Builder. См. Раздел «Подключить вывод текстового поля» в примере секундомера. – jtomschroeder

+0

Я последовал за этим и связал все, но он все еще не работает. – pattmorter