为什么NSMutableArray重置自己

时间:2015-03-02 17:46:21

标签: objective-c

我正在使用NSMutableArry来访问另一个viewController上的id。当我将对象添加到数组时,我关闭窗口转到另一个对象。当我添加第二个对象时,它只显示数组中的一个对象。

ViewCotrlloerA.h

@property (strong, nonatomic)NSMutableArray *bookMarkItems;

ViewControllerA.m

- (IBAction)saveForLater:(UIButton *)sender 
{
    [self.bookMarkItems addObject:story_id];

    NSLog(@"%@", bookMarkItems);
    NSLog(@"%lu", (unsigned long)[bookMarkItems count]);
}

ViewControllerB.h

@class ViewControllerA;

@property (strong, nonatomic)ViewControllerA *sc;

ViewControllerB.m

self.sc.bookMarkItems = [[NSMutableArray alloc] init];
NSString *story_ids = [self.sc.bookMarkItems componentsJoinedByString:@","];

此时,story_ids为零。谁能告诉我为什么?我需要能够在controllerA中存储许多故事ID并在ControllerB中查看它们。

3 个答案:

答案 0 :(得分:2)

虽然有一些方法可以从另一个视图控制器访问ViewController A的属性,但是为它提供一个强大的数组属性以便从另一个视图控制器传递指针会更好。

//View controller being passed data
@property (nonatomic, strong) NSMutableArray *passedArray;

然后您需要一个具有数组参数的自定义init方法。

-(instancetype) initWithArray: (NSMutableArray *) array
{
    self = [super init];
    if (self) {
        //INIT ALL YOUR OTHER PROPERTIES
        self.passedArray = array;
    }
    return self;

}

这应该允许您访问在先前视图控制器中使用的相同阵列实例。在实例化此视图控制器时,请记住使用此自定义init方法。

答案 1 :(得分:0)

此时数组中没有任何内容的原因是,当您致电self.sc.bookMarkItems = [[NSMutableArray alloc] init];时,您正在将self.sc.bookMarkItems设置为新的数组。如果您在ViewControllerB中初始化数组并且正在ViewControllerA的实例访问数组,则不必在ViewControllerA中初始化数组。

答案 2 :(得分:0)

因为您要将数据转发到下一个viewController(A到B)。您应该只创建一个自定义init方法并相应地传递该数组。因为你试图通过self.sc

访问的对象(viewcontroller A)被破坏了

我会说你没有在这个答案中编写代码,而是访问适当的iOS开发教程。因为很快你需要向后发送数据(b到A)。