【问题标题】:Can't copy NSMutableArray to property无法将 NSMutableArray 复制到属性
【发布时间】:2012-01-25 04:04:12
【问题描述】:

我在本网站和其他网站上阅读了无数关于数组复制的问题,但没有一个能直接解决我遇到的问题。

我已经声明并合成了一个名为 arrXTurbulenceValues 的属性:

@property (weak, nonatomic) NSArray *arrXTurbulenceValues;

@synthesize arrXTurbulenceValues;

我在 ViewDidLoad() 方法中初始化数组:

self.arrXTurbulenceValues = [[NSArray alloc] init];

一些处理发生在方法中,其中值存储到 NSMutableArray。在该处理结束时,我试图通过以下代码将 NSMutableArray 深度复制到 NSArray 属性中:

                self.arrXTurbulenceValues = [[NSMutableArray alloc] initWithArray:tempXvalues copyItems:YES];

复制失败,self.arrXTurbulenceValues 保持为零。我试图复制的 tempXvalues 数组中包含 1900 多个 NSString 对象。

我做错了什么?我已经尝试在 ViewDidLoad() 中使用 & 不初始化的情况下复制代码,并且我还尝试将属性配置为 NSArray 和 NSMutableArray。

NSString 是否响应 NSCopying?看来,如果我正确阅读了文档。

与 Objective C 耦合的 iOS 环境是一场噩梦。我从未见过如此挑剔的事情。呃。

【问题讨论】:

    标签: nsmutablearray nsarray nscopying


    【解决方案1】:

    假设您在 ARC 中运行,请尝试将“弱”更改为“强”:

    @property (weak, nonatomic) NSArray *arrXTurbulenceValues;
    

    进入:

    @property (strong, nonatomic) NSArray *arrXTurbulenceValues;
    

    在您的 -viewDidLoad 方法结束时,不再有对数组的强引用,它正在解除分配(这也消除了对它的所有弱引用)

    【讨论】:

    • 天啊,谢谢,这似乎奏效了!!!我没有考虑过那个弱/强的角度。我正准备把头发扯下来。非常感谢,非常感谢。
    • 一般情况下,您将使用“strong”作为变量。 “弱”通常用于“反向指针”以避免强引用循环。在对象所有权图上,您通常在顶层拥有对象,并拥有它们下面的对象(强)。当你需要去另一个方向时,你使用弱引用。 (所有权图示例:github.com/musictheory/SwiffCore/wiki/classes.png,实心箭头为强引用,空心箭头为弱引用)。
    • @NightStalker,如果这回答了你的问题,你应该接受它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-02
    • 2012-05-29
    • 2012-12-08
    • 2023-04-04
    相关资源
    最近更新 更多