我目前在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类。
所以我使用setters
和getters
方法放置@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}}的形式返回?
最终也希望有一些帮助解决它,它似乎真的让我感到困惑。
非常感谢帮助!!
答案 0 :(得分:1)
要回答你的第一个问题,你会“突然”拥有一个NIL属性,因为你正在做的是实例化你的B类的不可见版本,即使你的新XIB /故事板框架已经在另一部分中查看了存储器中。
如果您使用的是故事板,我建议您使用@HotLicks提供的prepareForSegue
方法。我个人喜欢this answer在视图控制器之间向前和向后传递数据。
如果您不使用故事板,则需要手动开始推送新的XIB,以便以面向对象的友好方式从A到B获取数据。
单个实例肯定会处理这个问题,但是从面向对象的纯粹主义的角度来看它是不受欢迎的。如果沿着这条路走下去,你需要确保使用dispatch_once
你将有可能让视图控制器错误地重新实例化你的有用数据。
还有其他一些方法,但这应该有助于让球滚动。祝你好运。