Objective-C: NSMutableArray инициализирован и добавлен правильно, но значения не могут быть получены - PullRequest
0 голосов
/ 21 марта 2012

так что у меня есть подкласс UIScrollingView, который получил NSMutableArray от всех своих представлений.Я заполняю этот массив, передавая серии представлений, которые я хочу добавить к нему.Тем не менее, когда я иду, чтобы получить эти представления в моей функции touchesEnded, я получаю сбой.Вот неправильный код

#import "StageScrollView.h"
#import "Stage.h"


@implementation StageScrollView

@synthesize controller;

-(id)initWithCoder:(NSCoder *)encoder{

    self = [super init];

    if(self != nil)
    {
        stages = [[NSMutableArray alloc] init];
    }

    return self;

}

-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{

    if(stages == nil)
    {
        NSLog(@".......");
    }

    int index = (int)[controller getCurrentStage];
    Stage *currentStage = [stages objectAtIndex:index];



    UITouch *touch = [[touches allObjects] objectAtIndex:0];
    CGPoint spawn = [touch locationInView:currentStage];

    Performer *temp = [[Performer alloc] init];
    [temp setFrame:CGRectMake(spawn.x, spawn.y, 25, 25)];

    [currentStage addPerformer:temp];

    NSLog(@"Touch ended!! %i", index);

}

//we probably shouldn't init stages here...best practices????
-(void)addStage:(Stage *)stageToAdd
{

    //[stageToAdd retain];

    [stages addObject:[stageToAdd retain]];
    [self addSubview:stageToAdd];

    Stage *temp = [stages objectAtIndex:0];
    NSLog(@"%@", temp);
}


@end

, обратите внимание, что я инициализировал NSMutableArray в initWithCoder, так как я загружаюсь из пера.И да, когда я печатаю 0-й элемент в функции addStage, он печатается правильно.Но когда я пытаюсь получить 0-й элемент в функции touchesEnded, не происходит игра в кости.Для чего это стоит, когда я пытаюсь проверить этапы в отладчике, он пытается прочитать его как NSCFString.Контроллер вида controller устанавливается через IB.

Спасибо за любую помощь!

1 Ответ

0 голосов
/ 21 марта 2012

Поскольку это загрузка из Nib, вы можете попробовать:

-(void)awakeFromNib {
    stages = [[NSMutableArray alloc] init];
}

Если это подкласс UIViewController, есть также опция:

-(void)viewDidLoad {
    stages = [[NSMutableArray alloc] init];
}

-(void)viewDidUnload {
    [stages release];
    stages = nil;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...