2011-07-05 26 views
-1

我想在两个类之间传递一个NSMutableDictionary对象。我试过添加一个返回字典的方法无济于事。NSDictionary类之间通过

-(NSMutableDictionary*) getResponse 
{ 
return response; //where response is a dictionary that has keys and objects assigned 
} 

但即使如此字典不能从其他类拉;它返回“null”。

+0

没有什么错你的榜样...如果在你的课堂上定义了“response”,这将返回它。确保其他课程保留它! –

+3

它有一个错误:它的名字。它应该只是“响应”符合Cocoa命名约定。以'get'开头的选择器应以冒号结尾,并且参数应该是存储获取值(通过引用返回)的指针。这种方法很好,但应该简单地命名为“响应”。 –

回答

2

我试过添加一个方法,它自己返回无济于事。

-(NSMutableDictionary*) getResponse 
{ 
return response; 
} 

这是因为该方法返回一个字典。对于自身返回的方法,它必须询问对象self该方法的选择器的实现,或者要求Objective-C运行时返回Method结构。

但这不是你真正想要做的,是吗?

如果你的意思是这种方法返回响应字典,那么,这正是它所做的。它的写法是正确的(除了它的名字,我已经在我对这个问题的评论中解释过了)。

...但即使如此,数据不能从其他类中拉出;

该方法不声称返回一个数据对象;它声称返回一个字典对象。如果它返回了一个数据对象,那就是一个错误。

...它返回void。

不,它返回NSMutableDictionary *void是一种类型;没有其他方面是有道理的。

如果你的意思是返回nil(指向没有对象的指针),那就意味着你没有返回的响应字典。不要问这个对象的响应,直到它有一个。

您可能希望让响应的对象成为保存响应的对象的委托,并让响应持有者在响应进入时向其委派发送消息。您甚至可以将响应包含在那个信息;另一种选择是答复持有者只通过自己,而代表则询问答复持有人是否在其实施委托方法时使用响应字典。

的更多信息:

+0

我编辑我的问题,使更有意义。不过由于某些原因,这个变量似乎不被保留。我会检查我的代码。谢谢。 – Baub

+0

@James Martinez:你的代码没有理由保留它。您不保留此权限,因此只有在主叫方保留该权限时才能保留该权限。如果您在'response'中引用了字典的原始所有权,则getter不是查找该字典的地方:查看setter或者原始赋值给变量或属性。请注意,分配给变量并分配给属性与Objective-C语言文档中讨论的非常不同。 –

0

如果你的方法返回零,这是因为你的response变量为零。目前可能无法初始化。尝试在getResponse方法中执行NSLog(@"Response: %@", response);。查看控制台是否打印(空)或有效的NSMutableDictionary对象。

+0

它打印出null,但它应该已经有了它之前声明和使用的信息。 – Baub

+1

表示该变量从未设置。记忆保留在这里不是问题。在执行此方法之前,您的init/setter未被调用。或者,你在一个新的对象上执行它,而不是一个初始化的对象。 – David

+0

我附上我的代码在这里:http://stackoverflow.com/questions/6599955/cant-send-nsmutabledictionary-to-another-class – Baub