【问题标题】:How to call a method from an object in an array?如何从数组中的对象调用方法?
【发布时间】:2015-11-08 14:14:37
【问题描述】:

我是 Objective-c 的新手,我认为这应该很容易,但不知何故我无法弄清楚。

我需要从存储在 NSArray 中的对象调用方法。 Java 代码为:myArray[0].getMyValue();

所以我在互联网上读到,在 Objective-c 中它应该是这样的:[[myArray objectAtIndex: 0] getMyValue]。不幸的是,这不起作用。

我在互联网上找到了其他解决方案,但没有一个有效。

所以我希望你们能帮助我吗?

更新

我收到以下两条错误消息:

  • 选择器“getMyValue”没有已知的实例方法
  • 向不兼容类型“CGFloat”(又名“double”)的参数发送“id”

【问题讨论】:

  • 详细信息。你的意思是它没有工作?它不编译吗?它会在运行时崩溃吗?无论哪种方式,错误是什么?
  • 这样不行,你需要将对象作为参数发送给你调用的方法
  • @Mr.T 这是完全错误的。如果他只是想调用该对象的实例方法,他为什么要提供该对象作为参数?

标签: ios objective-c


【解决方案1】:

这不起作用,因为 Objective-C 不知道数组中对象的类型。

幸运的是,Apple 在 Xcode 7 中添加了轻量级泛型,允许您创建类型化数组。这当然只有在您打算在数组中包含一种类型的对象时才有效。语法如下:

NSArray<NSString *> *stringArray;

如果您计划在数组中包含不同类型的对象,那么您需要将对象转换为您的类型,以便能够调用您的方法。看起来像这样:

[((YourObject *)[myArray objectAtIndex: 0]) getMyValue];

正如@Michael 在评论中指出的那样,另一种更好的方法是:

[((YourObject *)myArray[0]) getMyValue];

【讨论】:

  • 你能提供一个简单的测试方法,叫做getMyvalue和你在这里提到的调用它后的结果吗?
  • 你也可以让这个看起来更像你的原始代码,通过使用语法糖索引语法:[myArray[0] getMyValue] 或(如果 getMyValue 是一个属性)myArray[0].myValue。您想要执行所有常规检查以检查是否越界或遇到异常。
【解决方案2】:

对象以id 类型存储在NSArray 中,因此您可以将此对象转换为您想要的对象类型。例如:

NSNumber *myNumber = (NSNumber *)[NSArray objectAtIndex:0];
[myNumber myMethod];

【讨论】:

  • @Dalibor 看我的回答,我在这里向你展示如何在一行中写出来。
猜你喜欢
  • 2021-12-28
  • 1970-01-01
  • 1970-01-01
  • 2015-02-12
  • 2014-09-29
  • 2012-04-21
  • 2016-02-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多