我将在哪里实现此数组传递?

时间:2013-06-30 22:53:29

标签: objective-c ipad nsmutablearray

我目前在NSMutableArray方法中的 Class A.m 中构建ViewDidLoad

- (void)viewDidLoad
{
    [super viewDidLoad];

    //Question Array Setup and Alloc
    stratToolsDict = [[NSMutableDictionary alloc] initWithObjectsAndKeys:countButton,@"count",camerButton,@"camera",videoButton,@"video",textButton,@"text",probeButton,@"probe", nil];
    stratTools = [[NSMutableArray alloc] initWithObjects:@"Tools",stratToolsDict, nil];
    stratObjectsDict = [[NSMutableDictionary alloc]initWithObjectsAndKeys:stratTools,@"Strat1",stratTools,@"Strat2",stratTools,@"Strat3",stratTools,@"Strat4", nil];
    stratObjects = [[NSMutableArray alloc]initWithObjects:@"Strategies:",stratObjectsDict,nil];
    QuestionDict = [[NSMutableDictionary alloc]initWithObjectsAndKeys:stratObjects,@"Question 1?",stratObjects,@"Question 2?",stratObjects,@"Question 3?",stratObjects,@"Question 4?",stratObjects,@"Question 5?", nil];


    //add strategys to questions
    QuestionsList = [[NSMutableArray alloc]init];
    for (int i = 0; i < 1; i++) {
        [QuestionsList addObject:QuestionDict];
    }
    NSLog(@"Object: %@",QuestionsList);

在此方法结束时,您将看到QuestionList被初始化,现在我需要将此Array发送到 B类

所以我使用settersgetters方法放置@property@Synthesize Class A.h

@property (retain, nonatomic) NSMutableDictionary *stratToolsDict;
@property (retain, nonatomic) NSMutableArray *stratTools;
@property (retain, nonatomic) NSMutableArray *stratObjects;
@property (retain, nonatomic) NSMutableDictionary *QuestionDict;
@property (retain, nonatomic) NSMutableArray *QuestionsList;

Class A.m

@synthesize QuestionDict;
@synthesize stratToolsDict;
@synthesize stratObjects;
@synthesize stratTools;
@synthesize QuestionsList;

我使用属性方法,因为我将从 B类调用此变量,并希望能够将其分配给另一个NSMutableArray

然后我将 A类@property@class添加到 Class Bh ,并在其中声明NSMutableArray @interface。

#import "Class A.h"

    @class Class A;

    @interface Class B : UITableViewController<UITableViewDataSource, UITableViewDelegate>{
        NSMutableArray *QuestionList;
        Class A *arrayQuestions;
      }

    @property Class A *arrayQuestions;

然后我在班级B.m

中从A班打电话给NSMutableArray
-(id)initWithStyle:(UITableViewStyle)style
{
    if ([super initWithStyle:style] != nil) {

        //Make array
        arrayQuestions = [[Class A alloc]init];
        QuestionList = arrayQuestions.QuestionsList;

在此之后我记录NSMutableArray以查看值并检查它们是否存在并返回NIL

//Log test
NSLog(@"QuestionList init method: %@",QuestionList);

关于 B类的信息 - B类 A类UIPopOverController B类有一个视图,其中包含UITableView我拥有的NSMutableArray填充 A类 NsMutableArray的结果。

为什么NIL会以{{1}}的形式返回? 最终也希望有一些帮助解决它,它似乎真的让我感到困惑。 非常感谢帮助!!

1 个答案:

答案 0 :(得分:1)

要回答你的第一个问题,你会“突然”拥有一个NIL属性,因为你正在做的是实例化你的B类的不可见版本,即使你的新XIB /故事板框架已经在另一部分中查看了存储器中。

如果您使用的是故事板,我建议您使用@HotLicks提供的prepareForSegue方法。我个人喜欢this answer在视图控制器之间向前和向后传递数据。

如果您不使用故事板,则需要手动开始推送新的XIB,以便以面向对象的友好方式从A到B获取数据。

单个实例肯定会处理这个问题,但是从面向对象的纯粹主义的角度来看它是不受欢迎的。如果沿着这条路走下去,你需要确保使用dispatch_once你将有可能让视图控制器错误地重新实例化你的有用数据。

还有其他一些方法,但这应该有助于让球滚动。祝你好运。