Доступ к содержимому NSMutableArray между классами - PullRequest
0 голосов
/ 14 марта 2011

У меня есть NSMutableArray в одном из моих классов.Но мне нужно получить доступ к информации, содержащейся в этом массиве, из другого класса.Я пытался использовать свойства, но я сделал это неправильно, или он не работает для меня.Я пытался NSUserDefaults, но тоже не повезло.Я пытался использовать

MainGame *mainGameClass = [[MainGame alloc]init];

NSMutableArray *snacksLocationArray = main.snacksArray;

, но, похоже, ничего из этого не работает.Названы два класса: MainGame и Kool

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 14 марта 2011

Если вы предоставляете доступ к вашему массиву, тогда любой должен иметь к нему доступ. Использование singleton больше похоже на превращение его в глобальную переменную, чем просто предоставление доступа к нему.

// In MainGame.h
@interface MainGame : NSOBject {
    NSMutableArray *snacksLocationArray;
}
@property (retain) NSMutableArray *snacksLocationArray;
@end

// In MainGame.m
@implementation MainGame
@synthesize snacksLocationArray;
@end

// In Kool.h
@interface Kool : NSObject {
}
- (void) doSomethingFunkyWithSnacksArray: (NSMutatableArray *) a;
- (void) doSomethingWeirdWithMainGame: (MainGame *) g;
@end

// In Kool.m
@implementation Kool
- (void) doSomethingFunkyWithSnacksArray: (NSMutatableArray *) a {
    [a addObject: @"Funky"];
}
- (void) doSomethingWeirdWithMainGame: (MainGame *) g {
    [self doSomethingFunkyWithSnacksArray: g.snacksLocationArray];
    [g.snacksLocationArray addObject: @"Weird"];
}

Это делает то, о чем ты думаешь? Позволяет получить доступ к массиву из методов в Kool. «Funky» и «Weird» будут правильно сохранены в массиве для использования в MainGame.

Вы также можете установить ivar для массива в пределах Kool для доступа к массиву, используя методы, которые могут не иметь доступа к объекту MainGame.

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

Вы можете использовать синглтон, для которого в качестве свойства установлен ваш изменяемый массив.Таким образом, вы можете вызывать что-то вроде [MainGame sharedGame].snacksArray из любой точки вашего приложения.

Вот как должен выглядеть ваш sharedGame метод:

static MainGame *sharedGame = nil;

+ (MainGame *)sharedGame {

    if(sharedGame == nil)
        sharedGame = [[super alloc] init];

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