NSMutableArray addObject не добавляет объекты, а объект выделяется - PullRequest
0 голосов
/ 31 мая 2011

Я пытаюсь использовать addObject: на NSMutableArray с созданным мною классом, названным Position.Согласно журналам, экземпляр Position, который я добавляю в массив, не является nil - я могу вывести его свойства в журнал.Однако массив, кажется, никогда не принимает Position.

@implementation Position

@synthesize tradeDirection, instrument, quantity, fill, profit, positive, index;

-(id)initWithArray:(NSArray*)data
{
    self = [super init];
    if (self)
    {
        self.tradeDirection = [data objectAtIndex:0];
        self.instrument     = [data objectAtIndex:1];
        self.quantity       = [data objectAtIndex:2];
        self.fill           = (NSNumber*)[data objectAtIndex:3];
        self.profit         = [data objectAtIndex:4];
        self.positive       = [@"True" isEqualToString:[data objectAtIndex:5]];
        self.index          = (NSNumber*)[data objectAtIndex:6];
    }
    return self;
}

+(Position*)createPositionWithString:(NSString*)data
{
    return [[[self alloc] initWithArray:[data componentsSeparatedByString:@"#"]] autorelease];
}

@end

loadPositions: метод данных

-(void)loadPositions:(NSString*)data
{
    TT_RELEASE_SAFELY(_positions);
    NSArray* dataArray = [data componentsSeparatedByString:@";"];
    for (int i = 2; i <= [dataArray count] - 2; i++)
    {
        //TODO: Discover why this does not add a position.
        Position* newPos = [Position createPositionWithString:[dataArray objectAtIndex:i]];
        [_positions addObject:newPos]; //position never actually gets added
        NSLog(@"Position direction: %@", newPos.tradeDirection); //logs what I expect, i.e. newPos is not nil
    }
}

После вызова loadPositions:data, _positions по-прежнему nil,Довольно просто;У меня такое ощущение, что это как-то связано с управлением памятью, но на данный момент мне просто нужен второй набор глаз.Что мне не хватает?

1 Ответ

5 голосов
/ 31 мая 2011

Макрос TT_RELEASE_SAFELY отправляет сообщение об освобождении в свой аргумент перед тем, как присвоить его nil (IIRC). Почему удивительно, что _positions равен нулю?

Хотя по какой-либо причине вам может потребоваться освободить _postitions, вы должны выделить и инициализировать новый объект и назначить его ссылку на _positions, прежде чем вы сможете добавлять в него элементы.

edit: как указал Люк в своем комментарии, TT_RELEASE_SAFELY из библиотеки three20.

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