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