0

我在 Objective C 中传递参数时遇到问题。这是我的情况:

我有一个根控制器(主屏幕)。在其视图内部有一个 ScrollView,它包含 3 个视图(接下来的 3 个控制器)。您可以水平滚动它,并且 ScrollView 中的这 3 个视图正在发生变化。接下来我有一个与某些硬件通信的对象。有一个会话和输入/输出流。该对象接收一些数据,我需要在视图中显示这些数据(根视图和滚动视图中的 3 个视图)。根控制器和这 3 个控制器有时也会要求一些数据。

这意味着通信对象必须具有所有控制器的实例才能直接向它们发送数据。但是控制器必须具有通信对象的实例才能请求数据。

我想这样做:根控制器为其子视图(在滚动视图中)创建 3 个控制器并显示它们。它还创建通信对象并将这 3 个控制器(通过 ref)发送到该对象。并且还发送到通信对象的每个控制器实例。在这种情况下,通信对象能够直接向控制器发送数据,控制器也能够直接请求数据。

通常我使用 C#,所以通过 ref 传递参数不是问题,但似乎在 Objective C 中这是不可能的。当我想发送引用时,它会创建一个副本并发送它,所以我有两个对象副本,我不想要它。我想引用一个对象。我试图发送一个指针 -(UIViewController **)controller但它似乎也不起作用。

你能告诉我应该如何解决这个问题吗?下一个想法是根控制器创建 3 个子控制器和一个通信对象。此通信对象将向根控制器发送消息,并将此消息转发给正确的控制器。子控制器将消息发送到根控制器并将其转发给通信对象。

4

2 回答 2

0

如果你没有明确地复制对象,那么在 Objective-C 中是通过引用传递的:

void addWorld(NSMutableString *stringReference) {
    [stringReference appendString:@"world!"];
}

通过引用传递:

NSMutableString *greeting = [NSMutableString stringWithString:@"Hello, "];
addWorld(greeting);
NSLog(@"%@", greeting);

另请参阅答案“如何在目标 C 中通过引用传递值”。

于 2013-08-27T11:45:15.837 回答
0

我是白痴。当我发送参考时,它是零。问题解决了,Objective C 通过 ref 传递对象。但是我仍然想知道通信对象直接访问控制器和控制器直接访问通信对象是否是正确的解决方案?

于 2013-08-27T12:50:39.290 回答