Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.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
Objective c 如何在objective c中从不同类访问数组_Objective C_Arrays_Class - Fatal编程技术网

Objective c 如何在objective c中从不同类访问数组

Objective c 如何在objective c中从不同类访问数组,objective-c,arrays,class,Objective C,Arrays,Class,我知道这个问题已经被问过好几次了,但是经过广泛的搜索,到目前为止,没有一个适合我。如果可能的话,我想避免使用单例。抱歉,如果这是一个重复的问题 我有一个可变数组,在我的ViewController.m文件中有5个对象,名为storyList。我希望能够在我的DetailViewController.m文件中访问此故事列表数组 我尝试过的一种方法是: (storyListArrayinDetail是detailviewcontroller中的一个新数组,storyList是ViewControll

我知道这个问题已经被问过好几次了,但是经过广泛的搜索,到目前为止,没有一个适合我。如果可能的话,我想避免使用单例。抱歉,如果这是一个重复的问题

我有一个可变数组,在我的ViewController.m文件中有5个对象,名为storyList。我希望能够在我的DetailViewController.m文件中访问此故事列表数组

我尝试过的一种方法是: (storyListArrayinDetail是detailviewcontroller中的一个新数组,storyList是ViewController.h中包含5个对象的数组) 在ViewController.h中

DetailViewController *controller;
@interface DetailedViewController : UIViewController
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil withDataArray:(NSArray*)dataArray;
@end
@interface DetailedViewController : UIViewController
@property(nonatomic, assign)NSArray *myDataArray;
@end
在ViewController.m中

 controller = [[DetailViewController alloc]init];
 controller.storyListArrayinDetail = [[NSMutableArray alloc]init];       
 controller.storyListArrayinDetail = storyList;
@interface DetailedViewController () {
   NSArray *myDataArray;
}

@end

@implementation DetailedViewController

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil withDataArray:(NSArray*)dataArray
    {
        self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
        if (self) {
            // Custom initialization
            myDataArray = [NSArray arrayWithArray:dataArray];
        }
        return self;
    }

...
DetailedViewController *controller = [[DetailViewController alloc]init];
[controller setMyDataArray:xyArray];

当我在ViewController.m中记录controller.storyListArrayinDetail时,我得到了5个对象的正确数组。但是,当我在DetailViewController.m中记录storyListArrayinDetail时,我什么也得不到

尝试覆盖DetailViewController.m上的方法
(id)init
,并在此处初始化storyListArrayinDetail。 然后,每当初始化DetailViewController时,您也将初始化StoryListArrayDetail。因此,要发送故事列表,只需使用以下代码:

controller = [[DetailViewController alloc]init];
controller.storyListArrayinDetail = storyList;

希望对您有所帮助

您可以在DetailViewController中创建一个新的init方法,并在初始化时传入数组

//假设DetailViewController实际上是一个UIViewController,不确定是否来自OP中的init方法

DetailedViewController.h

DetailViewController *controller;
@interface DetailedViewController : UIViewController
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil withDataArray:(NSArray*)dataArray;
@end
@interface DetailedViewController : UIViewController
@property(nonatomic, assign)NSArray *myDataArray;
@end
DetailedViewController.m

 controller = [[DetailViewController alloc]init];
 controller.storyListArrayinDetail = [[NSMutableArray alloc]init];       
 controller.storyListArrayinDetail = storyList;
@interface DetailedViewController () {
   NSArray *myDataArray;
}

@end

@implementation DetailedViewController

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil withDataArray:(NSArray*)dataArray
    {
        self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
        if (self) {
            // Custom initialization
            myDataArray = [NSArray arrayWithArray:dataArray];
        }
        return self;
    }

...
DetailedViewController *controller = [[DetailViewController alloc]init];
[controller setMyDataArray:xyArray];
然后在DetailedViewController中,您可以使用
myDataArray
。希望有帮助

编辑:要包含热舔建议:

DetailedViewController.h

DetailViewController *controller;
@interface DetailedViewController : UIViewController
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil withDataArray:(NSArray*)dataArray;
@end
@interface DetailedViewController : UIViewController
@property(nonatomic, assign)NSArray *myDataArray;
@end
ViewController.m

 controller = [[DetailViewController alloc]init];
 controller.storyListArrayinDetail = [[NSMutableArray alloc]init];       
 controller.storyListArrayinDetail = storyList;
@interface DetailedViewController () {
   NSArray *myDataArray;
}

@end

@implementation DetailedViewController

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil withDataArray:(NSArray*)dataArray
    {
        self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
        if (self) {
            // Custom initialization
            myDataArray = [NSArray arrayWithArray:dataArray];
        }
        return self;
    }

...
DetailedViewController *controller = [[DetailViewController alloc]init];
[controller setMyDataArray:xyArray];

因为您已经分配了一个新的、完全分离的DetailViewController,它与将5个项目添加到阵列的DetailViewController无关。我需要其他信息:如何实例化DetailViewController和ViewController?你的应用程序代理中有指向它们的指针吗?你在使用情节提要吗?@robmayoff是的,我在使用情节提要如何在DetailViewController中使用数组
控制器?DetailViewController中没有定义控制器这就是我的意思,在
DetailViewController.m
上重写init方法并初始化
StoryListArrayDetail
如下:
-(id)init{self=[super init];if(self){StoryListArrayDetail=[[NSMutableArray alloc]init];}return self;}
无需使用
controller
,因为您在
DetailViewController
类中。或者您可以向控制器添加属性,并在创建控制器后使用数组地址对其进行设置。感谢您的回答,我认为它应该可以工作,但当我将
-(id)initWithNibName:(NSString*)nibNameOrNil bundle:(NSBundle*)nibBundleOrNil with dataArray:(NSArray*)dataArray;
DetailViewController.h
中,我得到两个错误:
预期的成员名或“;”在声明说明符之后
类型名需要说明符或限定符
您是DetailViewController还是UIView?