1

我目前在方法中构建了一个NSMutableArrayin Class AmViewDidLoad

- (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);

在此方法结束时,您将看到 QuestionsList 正在初始化,现在我需要将其发送ArrayClass B

所以我放置它settersgetters使用@propertyand@Synthesize方法。 阿班

@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;

上午班

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

我使用属性方法是因为我要从B 类调用这个变量并希望能够将它分配给另一个NSMutableArray.

然后,我将 A 类的 and 添加到Bh@property类,在 @interface中声明。@classNSMutableArray

#import "Class A.h"

    @class Class A;

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

    @property Class A *arrayQuestions;

然后我NSMutableArray从 Bm 班的 A 班打电话

-(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有一个视图,它包含一个我必须填充A 类的结果的视图。UITableView NSMutableArray

为什么NsMutableArray回来了NIL?最终也需要一些帮助来解决这个问题,这似乎真的让我很困惑。非常感谢您的帮助!

4

1 回答 1

1

要回答您的第一个问题,您“突然”有一个 NIL 属性,因为您正在做的是实例化您的 B 类的不可见版本,即使您的新 XIB/情节提要框架已经在内存的不同部分中查看。

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

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

单例实例当然会解决这个问题,尽管从面向对象的纯粹主义者的角度来看,它是不受欢迎的。如果你走这条路,你需要确保你使用dispatch_once你将有可能让视图控制器错误地重新实例化你的有用数据。

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

于 2013-07-01T02:23:49.323 回答