2011-03-09 93 views
0

我一直在嘗試幾個小時試圖讓這個工作,但我似乎無法做到。用戶按下一個按鈕,該按鈕在HandlingPalettes中調用「newPalette」,然後推入SingleView。這裏的所有revelant代碼我有:在類之間傳遞NSMutableArray的問題

HandlingPalettes.h:

@interface HandlingPalettes : UIViewController { 

NSMutableArray *navBarColour; 

} 

@property (nonatomic, retain) NSMutableArray *navBarColour; 

-(void)newPalette; 

@end 

HandlingPalettes.m:

#import "HandlingPalettes.h" 
#import "SingleView.h" 



@implementation HandlingPalettes 

@synthesize navBarColour; 


-(void)newPalette { 

    UIColor *colourOfNavBar = [UIColor colorWithHue:0 saturation:0 brightness:0.25 alpha:1]; 
    if (navBarColour == nil) { 
     navBarColour = [[NSMutableArray alloc] initWithObjects:colourOfNavBar, nil]; 
     currentPalette = 0; 
    } 
    else { 
     [navBarColour addObject:colourOfNavBar]; 
     currentPalette = navBarColour.count-1; 
    } 

    NSLog(@"Number: %i", navBarColour.count); 

} 

- (void)dealloc { 
    [super dealloc]; 
} 
@end 

SingleView.h:

#import "HandlingPalettes.h" 


@interface SingleView : UIViewController { 

} 

HandlingPalettes *handlingPalettes; 

@end 

SingleView.m:

#import "SingleView.h" 

@implementation SingleView 


- (void)viewDidLoad { 

    handlingPalettes = [[HandlingPalettes alloc] init]; 
    NSLog(@"Second number: %i", handlingPalettes.navBarColour.count); 
    [super viewDidLoad]; 

} 

- (void)dealloc { 
    [handlingPalettes release]; 
    [super dealloc]; 
} 


@end 

我的問題是,NSLog的返回:

數:1 第二個號碼:0

然後再回到第一個視圖,並再次按下按鈕..

號碼: 2 第二個號碼:0

並再次..

數3: 二麻木呃:0

有人可以幫我解釋爲什麼這不起作用嗎?

非常感謝。

+0

它應該怎麼做? – Max 2011-03-09 04:00:15

+0

爲什麼這是downvoted? – KingofBliss 2011-03-09 04:03:26

+0

它應該傳遞數組,以便兩個區域的計數相同。 – Andrew 2011-03-09 04:09:29

回答

4

您正在爲HandlingPalettes類創建不同的實例。你應該使用單例來做到這一點。

HandlingPalettes.m中的handlingPalettes和SingleView中的handlingPalettes總是不同的。所以使用單例類,或使用appDelegate在不同的類中訪問。

+0

+ 1,是的,讓不同類別的對象重新活化數組。 – Ishu 2011-03-09 04:21:13

+0

我不明白,你能解釋一下嗎? – Andrew 2011-03-09 04:24:03

+0

您正在爲類handlingPalettes創建一個新實例,這將爲handlingPalettes.color分配一個新的內存位置,但舊的實例將位於其他一些內存位置。所以它產生不同的值 – KingofBliss 2011-03-09 05:12:11

0

你需要這個

self.navBarColour = [[NSMutableArray alloc] initWithObjects:colourOfNavBar, nil]; 

替換該行HandlingPalettes.m

navBarColour = [[NSMutableArray alloc] initWithObjects:colourOfNavBar, nil]; 

而且你需要更改這裏

@interface SingleView : UIViewController { 

} 

HandlingPalettes *handlingPalettes; //not here 

@end 

正確

@interface SingleView : UIViewController { 

    HandlingPalettes *handlingPalettes;  

    } 



    @end 

編輯:

因爲它重新初始化array.so,你需要你在同一個類中創建這個數組或者在appDelegate類中創建這個數組。因爲應用程序委託類不會對其進行調整。

+0

不幸的是,在做出這些更改後,它返回了相同的結果。 – Andrew 2011-03-09 04:08:45