Objective c 发送';自我';对一个物体
我有一个IBOutlet和一个IBAction连接到一个AppController类。 单击按钮时,它会创建另一个类(CData)的实例,其中包含一条用于计算字符串的消息。我的问题是,我希望可以从CData对象中访问IBOutlet 我通过在消息中包含Objective c 发送';自我';对一个物体,objective-c,cocoa,Objective C,Cocoa,我有一个IBOutlet和一个IBAction连接到一个AppController类。 单击按钮时,它会创建另一个类(CData)的实例,其中包含一条用于计算字符串的消息。我的问题是,我希望可以从CData对象中访问IBOutlet 我通过在消息中包含self解决了这个问题,并在AppController中创建了一个IBOutlet的更新方法 - (IBAction)buttonClicked:(id)sender { CData *myData = [[CData alloc] init];
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
类必须以某种方式更新视图,那么您应该在iAction
方法中进行更新,或者将其视为MVC模式中的模型类,并让它生成视图可以观察到的nsnotification
前一种方法最简单:
- (IBAction)buttonClicked:(id)sender
{
CData *myData = [[CData alloc] init];
ReturnValueType someReturnValue = [myData calculateString:self];
[someObject someMethod:someReturnValue];
[myData release];
}
这减少了耦合,因为
CData
(Model)类不需要知道任何视图或控制器的存在。我不会以这种方式解决问题
如果CData
类必须以某种方式更新视图,那么您应该在iAction
方法中进行更新,或者将其视为MVC模式中的模型类,并让它生成视图可以观察到的nsnotification
前一种方法最简单:
- (IBAction)buttonClicked:(id)sender
{
CData *myData = [[CData alloc] init];
ReturnValueType someReturnValue = [myData calculateString:self];
[someObject someMethod:someReturnValue];
[myData release];
}
这减少了耦合,因为
CData
(Model)类不需要知道任何视图或控制器的存在。如果我们要遵循MVC体系结构,而Cocoa Touch是这样做的,那么模型层应该完全从视图层抽象出来。在这种情况下,让您的CData类访问IBOutlet违反了这一原则——假设CData是模型类型的类。正如您所说,一种方法是从
-calculateString
返回一些内容。这看起来像是更多的代码,但并不限制模型类的可重用性。如果我们遵循MVC体系结构,而Cocoa Touch则遵循,那么模型层应该完全从视图层抽象出来。在这种情况下,让您的CData类访问IBOutlet违反了这一原则——假设CData是模型类型的类。正如您所说,一种方法是从
-calculateString
返回一些内容。这看起来像是更多的代码,但并不限制模型类的可重用性。Hmm,因为我想在单独的线程中运行一些计算,而不是立即打印。通知将是实现这一目标的方法。谢谢。就我个人而言,我觉得通知只适用于影响代码中多个层和对象的事件。如果是一个延迟的计算,或者是一个简单的回调,委托通常更合适:嗯,因为我想在一个单独的线程中运行一些计算,而不是立即打印。通知将是实现这一目标的方法。谢谢。就我个人而言,我觉得通知只适用于影响代码中多个层和对象的事件。如果是延迟的计算或简单的回调,委托通常更合适:他这样做的方式是,给控制器提供CData访问权,而不是视图。IMO,问题是他正在向控制器传递指针。因此,从技术上讲,CData可以通过指针访问视图类。避免向不同层的类传递指针是MVC的核心。他这样做的方式是,他向控制器而不是视图提供CData访问。IMO,问题是他正在向控制器传递指针。因此,从技术上讲,CData可以通过指针访问视图类。避免向不同层的类传递指针是MVC的全部内容。