objective-c - 发送 'self' 到对象

标签 objective-c cocoa

我有一个 IBOutlet 和一个 IBAction 连接到 AppController 类。 单击按钮时,它会创建另一个类 (CData) 的实例,并带有一条计算字符串的消息。我的问题是我希望可以从 CData 对象内访问 IBOutlet。

我通过在消息中包含 self 解决了这个问题,并在 AppController 中创建了 IBOutlet 的更新方法。

- (IBAction)buttonClicked:(id)sender
{
CData *myData = [[CData alloc] init];
[myData calculateString:self];
[myData release];
}

calculateString 中我完成了以下操作:

- (void)calculateString:(id)parent
{
   [parent updateTextLog:@"Print data..."];
}

它就像一个魅力。 但我的问题是,当我试图熟悉 Obj-C 和 Cocoa 时,这是否是解决问题的好方法,或者是否还有其他方法?

这只是一个概念证明,因为我很清楚我可以让 calculateString 返回一个值。

最佳答案

我不会用这种方式解决问题。

如果 CData 类必须以某种方式更新 View ,那么您应该在 IBAction 方法中执行此操作,或者将其视为模型中的 Model 类MVC 模式,并让它生成 View 可以观察到的 NSNotifcation

前一种方法最简单:

- (IBAction)buttonClicked:(id)sender
{
    CData *myData = [[CData alloc] init];
    ReturnValueType someReturnValue = [myData calculateString:self];
    [someObject someMethod:someReturnValue];
    [myData release];
}

这减少了耦合,因为 CData(模型)类不需要知道任何 View 或 Controller 的存在。

关于objective-c - 发送 'self' 到对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4405717/

相关文章:

ios - 使用自动布局绘制自定义 UIView 并将其居中作为背景

objective-c - 发送一个 Action Cocoa - IBAction

iphone - 在 Objective-C 中创建 View 委托(delegate)的语法

xcode - 如何诊断拖动过程中的意外延迟?

image - WebView 到 TIFF 表示

cocoa - 如何在 iTunes 中获取左侧的 "Tableview"?

objective-c - 什么时候重写并重用 MTLBuffer 或其他 Metal 顶点缓冲区是安全的?

objective-c - 当没有其他引用保留对象时,如何安全地将 id 对象存储在 ARC 下的 C++ void* 成员中?

ios - 如何使用 UIBezierPath 修复无效上下文 0x0?

iphone - 我应该在所有 iOS 项目的其他链接器标志中包含 "-ObjC and -all_load"吗?