【问题标题】:How do I assign one Array to another Array in objective-c?如何在objective-c中将一个数组分配给另一个数组?
【发布时间】:2013-05-24 23:42:33
【问题描述】:

*强调文本*所以我正在使用 restkit 拉回一堆对象以显示在 UI 集合视图中。我得到了我的初始映射结果,它是一个 MyCell 对象的 NSArray。

我调用给定的成功块并将 mappingResult.array 返回给我的 getCellObjects 服务方法的调用者。

现在在调用 viewController 中,我只想将驱动我的 UICollectionView 的本地 NSArray 属性设置为我从 restkit 的映射中得到的那个。

[[MyService sharedClient] getCellObjectsWithSuccess:^(RKObjectRequestOperation *op, RKMappingResult mappingResult){
          self.myCells = [[NSMutableArray alloc] initWithArray:mappingResult.array];
}

在示例中,self.MyCells 是 NSMutableArray,mappingResult.array 是 NSArray。

我是 Objective-c 的新手。有没有办法将结果数组从 restKit 设置为我的本地 NSArray 属性?

目标是一旦对 getCellObjects 的调用完成,我就不再需要 mappingResult.array 所以它应该被丢弃,它的内容应该转移到 self.MyCells。

我在调用 initWithArray 时遇到的错误是 由于未捕获的异常 'NSInvalidArgumentException',原因'-[__NSArrayM 数组]:无法识别的选择器发送到实例 [某个内存地址] ]

【问题讨论】:

    标签: objective-c nsarray restkit-0.20


    【解决方案1】:

    mappingResult 已经是一个数组了,为什么还要调用(假设的,因为 NSArray 类不存在)array 方法?

    这样就好了:

    self.MyCells = [[NSMutableArray alloc] initWithArray:mappingResult];
    

    但我记得还有一个mutableCopy方法,适用于需要获取对象的可变副本时(结果相同):

    self.MyCells= [mappingResult mutableCopy];
    

    我还想记住,按照惯例,所有 ivars 都需要以非大写字母开头,因此我建议将 MyCells 更改为 myCells。

    【讨论】:

    • Welp,您实际上是对的,我的好伙伴。我正在发送 result.array 所以我在回调块中得到的对象已经是数组!谢谢。
    • 请注意,如果您的属性 myCells 具有保留或强属性,您将获得内存泄漏。您应该释放 mutablecopy 或添加 autorelease 方法。
    • @stosha 我以为他在使用 ARC。
    【解决方案2】:

    mappingResult已经是一个数组,所以不需要mappingResult.array

    在 NSArray 对象上调用 mutableCopy 方法以获取该数组的可变副本

    self.MyCells= [mappingResult mutableCopy];

    另外,MyCells 是一个 ivar,所以根据变量命名约定,我建议你将其命名为 myCells。

    给你: self.myCells= [mappingResult mutableCopy];

    【讨论】:

    • 为什么 restKit 的人会公开一个名为数组的访问器?我尝试做 mappingResult mutableCopy 并且仍然得到选择器错误。我将其更改为 mappingResult.array mutableCopy 并通过。请记住,在我的示例中,mappingResult 是一个 RKMappingResult。我没有看到 RKMappingResult 实现 NSArray 或任何东西。我正在使用 Restkit 0.20.0
    • 警告“[__NSArrayM array]: unrecognized selector sent to instance [some memory address]”显示了它是一个可变数组的实例。如果您仍有问题,请再次发布。
    • 我最终使用了 self.items = [mappingResult.array mutableCopy]。在 mappingResult 上调用可变副本直接给了我选择器错误。
    猜你喜欢
    • 2014-07-14
    • 2018-08-22
    • 2013-09-28
    • 1970-01-01
    • 1970-01-01
    • 2018-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多