Проблема передачи NSMutableArray между классами - PullRequest
0 голосов
/ 09 марта 2011

Я часами пытался заставить это работать, но я не могу этого сделать.Пользователь нажал кнопку, которая вызывает 'newPalette' в HandlingPalettes, а затем вставляет в SingleView.Вот весь полученный код:

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

Может ли кто-нибудь помочь мне и объяснить, почему это не работает?

Большое спасибо.

Ответы [ 2 ]

4 голосов
/ 09 марта 2011

Вы создаете другой экземпляр класса HandlingPalettes. Вы должны использовать синглтон для этого.

processingPalettes в processingPalettes.m и processingPalettes в SingleView всегда различаются. Поэтому используйте синглтон-класс или appDelegate для доступа к другому классу.

0 голосов
/ 09 марта 2011

вам нужно заменить эту строку в HandlingPalettes.m

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

с этим

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

И вам нужно изменить здесь

@interface SingleView : UIViewController {

}

HandlingPalettes *handlingPalettes; //not here

@end

правильный

 @interface SingleView : UIViewController {

   HandlingPalettes *handlingPalettes;    

    }



    @end

Edit:

Поскольку он повторно инициализирует array.so, вам нужно либо создать этот массив в том же классе, либо в классе appDelegate. потому что класс делегата приложения не восстанавливает его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...