Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone NSMutableArray&;多视图_Iphone_Objective C_Nsmutablearray - Fatal编程技术网

Iphone NSMutableArray&;多视图

Iphone NSMutableArray&;多视图,iphone,objective-c,nsmutablearray,Iphone,Objective C,Nsmutablearray,我正在尝试编写一个应用程序,该应用程序具有需要在不同视图中访问和修改的NSMutableArray。 MainViewController显示一个表格,该表格从NSMutableArray获取信息。 SecondaryViewController用于将对象添加到数组中。 在不将其声明为全局变量的情况下,如何执行此操作 编辑: 这就是我到目前为止所做的: (MainView.m) (SecondViewController.m) 您应该检查依赖项注入模式- 初始化SecondaryViewCont

我正在尝试编写一个应用程序,该应用程序具有需要在不同视图中访问和修改的
NSMutableArray

MainViewController
显示一个表格,该表格从
NSMutableArray
获取信息。
SecondaryViewController
用于将对象添加到数组中。
在不将其声明为全局变量的情况下,如何执行此操作

编辑
这就是我到目前为止所做的:
(MainView.m)

(SecondViewController.m)


您应该检查依赖项注入模式-


初始化SecondaryViewController时,可以传入NSMutableArray的引用(指针),并将其保存在本地实例变量中。然后,当SecondaryViewController需要访问数组时,它可以使用其引用。

将数组作为参数传递到SecondaryViewController的构造函数中,从而允许SecondaryViewController向其添加对象,将显示为MainViewController的对象将再次可见,您将重新加载表数据。

如何显示SecondaryViewController?如果愿意,可以在SecondaryViewController标头中定义属性,如下所示:

{
NSMutableArray *theArray;
}

@property (nonatomic, retain) NSMutableArray *theArray;
然后你必须在@implementation的下方@synthesis它

@synthesise theArray
在MainViewController中,在创建第二个ArrayController之后,您可以执行以下操作

theSecondaryViewController.theArray =theArrayWhichYouHaveCreated;

现在两个对象都有指向同一对象的指针。读一个,写另一个!我还没有测试过这段代码,但它应该可以工作。如果没有,请评论

让一个控制器负责阵列,并通过该控制器访问阵列。例如,为MainViewController提供对SecondaryViewController的引用,并将SecondaryViewController设置为表的数据源。

您必须声明一个
NSMutableArray
并在
TestAppDelegate.h

例如:

在main类中,必须为arrayList设置
@synthesis

如果要从
SecondViewController
arrayList
中添加对象,只需编写以下代码


TestAppDelegate *appDelegate = (TestAppDelegate*)[[UIApplication sharedApplication] delegate];
[appDelegate.arrayList addObject:object];
您可以从任何类(应用程序中使用的类)访问此数组

我想它会帮助你


谢谢。

共享可变状态不是一个好主意,在Cocoa中根本不习惯。最好让SecondaryViewController获取对MainViewController的引用,并要求它修改数组。共享可变状态不是一个好主意,在Cocoa中根本不惯用。最好让SecondaryViewController获取对MainViewController的引用,并要求它修改数组。这是我在尝试您所说的内容时在头文件中遇到的错误。错误:Objective-C类“NSMutableArray”的静态分配实例我如何引用它,这是我缺少的语法:(感谢你们的帮助:)@Antonio:这只是意味着你在写
NSArray某物
,而不是
NSArray*某物
@Chuck,或者更好,让这种代码完全不在视图控制器中,而是创建一个类来管理所有这些(可能是作为一个单例?)以适应mvc。这取决于如何使用它…我在主标题中引用了SecondaryViewController。这就是我想要做的。在主控制器中保留操纵数组的所有方法,然后从secondaryViewController调用这些方法。我只是不知道从secondaryViewController执行此操作的语法。有人能给我指一指我能学的地方吗?
theSecondaryViewController.theArray =theArrayWhichYouHaveCreated;
@interface TestAppDelegate : NSObject  {
    NSMutableArray *arrayList;
}
@property (nonatomic, retain) NSMutableArray *arrayList;
@end

TestAppDelegate *appDelegate = (TestAppDelegate*)[[UIApplication sharedApplication] delegate];
[appDelegate.arrayList addObject:object];

TestAppDelegate *appDelegate = (TestAppDelegate*)[[UIApplication sharedApplication] delegate];
1. NSMutableArray *array = [appDelegate.arrayList retain]; 

or

2. NSMutableDictionary *dictionary = [appDelegate.arrayList objectAtIndex:index];