【问题标题】:What's wrong with this Cocoa code?这个 Cocoa 代码有什么问题?
【发布时间】:2010-07-06 03:00:06
【问题描述】:

我正在尝试使用 XCode 3.2.3 制作一个简单的 Cocoa 应用程序。在界面生成器中,我添加了 NSTextField 和 NSButton。当我按下按钮时,我希望它清除文本字段中的任何内容。

我创建了一个名为 AppController.h 的新类。这是内容:

#import <Foundation/Foundation.h>


@interface AppController : NSObject {
    IBOutlet id textView;

}

- (IBAction) clearText: sender;
@end

AppController.m 看起来像这样:

#import "AppController.h"


@implementation AppController

- (IBAction) clearText: sender 
{ 
    [textView setString: @" "]; 


} 
@end

我将按钮连接到 clearText 并将文本框连接到 textView。

程序编译无误并运行。但是当我按下按钮时,什么也没有发生。这是为什么呢?

【问题讨论】:

  • 您是否单步执行代码以确认正在调用 clearText?
  • 你已经在这里问过同样的问题:stackoverflow.com/questions/3182304/…
  • Phenom:将字符串值设置为空格并不能真正清除它,因为它不会为空。它将包含一个字符,即空格 (U+0020)。
  • Phenom:另外,Xcode 是一个 IDE。询问“这个 Xcode 代码”比“这个 vim 代码”或“这个 emacs 代码”更有意义。唯一准确的方法是您询问 Xcode 本身的源代码。请参阅我对您的标题和标签的编辑以了解正确的措辞。
  • 我真的不在乎结果字符串是否包含一个空格。我只想清除已输入的任何文本的窗口。

标签: cocoa


【解决方案1】:

id 用于IBOutlet 是一种不好的做法。使用

      IBOutlet NSTextView* textView;

相反。

请使用调试器检查,或将NSLog(@"foo!"); 放在[textView setString:@""] 之前,看看是否真的调用了action 方法。

另一个陷阱是有NSTextViewNSTextField。这两个不一样! 前者同时支持setString:setStringValue:,而后者只支持setStringValue:。 您在界面构建器中使用了哪个对象?

【讨论】:

  • 如果 setString: 不存在,那么如何清除 textView?
  • 对不起,setString: 存在 :p 我对 NSControl 中的 -setStringValue: 感到困惑。
  • 飞鸿:你还没有回答宇治的问题。此外,在您的NSLog 语句中,您应该记录textView 变量以查看那里的指针。有关详细信息,请参阅NSLog 的文档。
  • 在界面生成器中,我在 NSScrollView 中使用了 NSTextView。
  • 我在界面生成器中删除了对象并重新创建了它,现在由于某种原因它可以工作了。
猜你喜欢
  • 2012-08-07
  • 2014-08-29
  • 2013-06-05
  • 2014-06-04
  • 2011-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多