iphone - NSMutableArrays 没有将它们的对象保存在共享实例中

标签 iphone ios objective-c

我有一个 sharedInstance,它由许多 NSMutableArrays 组成,它保存我所有的表单数据,这些数据分布在我的应用程序的许多 View 中。

他们在 .h 中的声明示例如下

@property (atomic, retain) NSMutableArray *i_date;
@property (atomic, retain) NSMutableArray *i_tailNumber;
@property (atomic, retain) NSMutableArray *i_pic;
@property (atomic, retain) NSMutableArray *i_sic;

在 .m (- init) 中

self = [super init];

_i_date = [NSMutableArray array];
_i_tailNumber = [NSMutableArray array];
_i_pic = [NSMutableArray array];
_i_sic = [NSMutableArray array];

共享实例函数为

+(id) sharedInstance
{    
    static id sharedInstance = nil;
    if (sharedInstance == nil) {
        sharedInstance = [[self alloc] init];        
    }
    return sharedInstance;
}

编辑:

我在第一个 View 中用空字符串实例化了所有数组,如下所示

[_fd.i_date addObject:@""];
[_fd.i_tailNumber addObject:@""];

最后,我在准备 segue 函数时以这种方式与我的数据进行交互

[_fd.i_date replaceObjectAtIndex:leg withObject:transferDate];
rinse and repeate

我的问题是,当我转到另一个 View 时,我的数组丢失了我放置在其中的任何对象,今天我通过阅读各种博客、文档和 SO 上的所有精彩资源来调查这个问题。

当我点击上面的代码行时,我得到了经典

signal SIGABRT

错误,它提示我的数组是空的(0 个对象),所以它不能替换任何东西。

我怀疑我没有正确处理我的共享实例,而且......也许,也许,我的数组的多个实例正在被分配,但我确信我的理解发生了转变。

知道发生了什么吗?我想我提供了所有必要的代码片段,但如果我忘记了什么,尽管问。再次感谢!

杰西


编辑: 你们真快! :D 我创建了启用了 ARC 的 OBJ-C 文件,所以我想我正在使用它。我是一个 C++ 人,主要是因为这个可选的手拿着内存的东西对我来说天生就模棱两可。


编辑: 完整的错误是

2013-04-10 20:25:03.239 ProjectName[4230:c07] *** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayM replaceObjectAtIndex:withObject:]: index 0 beyond bounds for empty array'
*** First throw call stack:
(0x1caf012 0x10ece7e 0x1c65ba9 0x7c7e 0x478b87 0x478c14 0x1100705 0x342c0 0x270a64 0x1100705 0x342c0 0x34258 0xf5021 0xf557f 0xf46e8 0x63cef 0x63f02 0x41d4a 0x33698 0x1c0adf9 0x1c0aad0 0x1c24bf5 0x1c24962 0x1c55bb6 0x1c54f44 0x1c54e1b 0x1c097e3 0x1c09668 0x30ffc 0x222d 0x2155)
libc++abi.dylib: terminate called throwing an exception

最佳答案

假设您没有使用 ARC,您的 init 方法使用了糟糕的内存管理。由于您是直接访问 ivar(而不是属性),因此您需要保留数组:

_i_date = [[NSMutableArray alloc] init];
_i_tailNumber = [[NSMutableArray alloc] init];
_i_pic = [[NSMutableArray alloc] init];
_i_sic = [[NSMutableArray alloc] init];

关于iphone - NSMutableArrays 没有将它们的对象保存在共享实例中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15938405/

相关文章:

ios - 在项目之间复制 View Controller

ios - 将包含 Latex Command for Mathematical 公式的 HTML 文本转换为输出正确公式的纯文本或属性文本

iphone - 在 UiDatePicker 中创建时间范围

iphone - 每对的第二个对象必须是非零

ios - Cordova:检查用户是否已启用推送通知的简洁方法

ios - 更改不相关 View 的 z 顺序

iphone - uitableviewcell 中的编辑模式仅适用于 ios 5.0

iphone - 创建适用于 ipad 和 iphones 的动态 list 文件

iphone - 如何在iphone中实现google搜索应用

iphone - 使用 Core Animation (CAKeyFrameAnimation) 调整和移动 UIView