2013-06-30 37 views
1

我目前在方法內建立 A.m我在哪裏可以實現這個數組?

- (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被初始化,現在我需要發送此ArrayB類結束。

所以我把它的settersgetters使用@property@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類添加@property@class類B.h以及聲明在@interface的NSMutableArray

#import "Class A.h" 

    @class Class A; 

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

    @property Class A *arrayQuestions; 

然後我在類B.m

-(id)initWithStyle:(UITableViewStyle)style 
{ 
    if ([super initWithStyle:style] != nil) { 

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

調用NSMutableArray從A級後,這個權利我登錄的NSMutableArray查看值,並檢查它們的存在,並返回NIL

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

信息關於B類 - B類A類一個UIPopOverControllerB類有一個視圖,其保存UITableView,我有填充的A類的結果NSMutableArray

爲什麼NsMutableArray回來時爲NIL? 最終還想要一些幫助搞清楚,它似乎真的讓我感到困惑。 非常感謝幫助!

+0

你的錯誤是相信你可以分配/初始化一個類的實例,它會奇蹟般地獲得該類的其他實例中的值。 –

+0

我應該使用單例方法來解決這個問題嗎?出於某種原因,這真的讓我難住。 @HotLicks – Keeano

+2

@KeeanoMartin單身人士並不能解決問題,他們創造了全球狀態。 – CodaFi

回答

1

要回答你的第一個問題,你有一個NIL屬性「突然」,因爲你正在做的是實例化一個不可見的B類版本,即使你的新的XIB/storyboard框架已經在另一部分的視圖中的記憶。

如果您正在使用故事板,我建議您利用@HotLicks調用的prepareForSegue方法。我個人喜歡this answer在視圖控制器之間向前和向後傳遞數據。

如果您不使用故事板,您需要手動推送新的XIB以便以面向對象的友好方式從A到B獲取數據。

一個單例實例肯定會照顧這個問題,不過從面向對象的純粹主義者的角度來看,它是被忽視的。如果你走這條路線,你需要確保你使用dispatch_once你將有可能視圖控制器重新實例化你有用的數據。

還有一些其他的方法,但這應該有助於球的滾動。祝你好運。

+0

謝謝你回答我的問題,我沒有使用StoryBoards。所以我應該走下設置和獲得價值的道路?如在大多數面向對象的語言中。但是使用單例方法會把全局變量放到可以訪問的地方,而我們不想要那個......正確? – Keeano

+0

這取決於「我們」。我將用它們來處理複雜的數據類,但最終真的取決於你。這是你的代碼:) – Dan

+0

好吧,那是真正的哈哈謝謝!我試過單身法,但我仍然得到一個NIL迴應....如果我打開一個shat,你會幫助我嗎? – Keeano

相關問題