2013-03-14 61 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)'undefined method'stringValue' – pattmorter 2013-03-14 23:23:06

+0

确认setMessageField:中使用的所有实例变量都在某处被分配 - 很可能在Interface Builder中。请参阅秒表示例中的“连接文本输出口”部分。 – jtomschroeder 2013-03-15 01:31:10

+0

我遵循这一点,并连接了所有东西,但它仍然无法正常工作。 – pattmorter 2013-03-15 03:36:42