Я не могу получить NSArray в качестве возвращаемого значения из функции - PullRequest
0 голосов
/ 07 ноября 2011

Я пытаюсь получить структуру на основе точек из функции с именем:

-(NSArray *) calcRose : (float) theta
{
    //first calculate x and y 
    //we need to get width and height of uiscreen

    //myPoint[0] = [UIScreen mainScreen].applicationFrame.size.width;

    NSMutableArray *Points = [[NSMutableArray alloc ] arrayWithCapacity:2];

    float angle = [self radians:theta];
    float side = cos(n * angle);
    int cWidth = 320;
    int cHeight = 240;
    float width = cWidth * side * sin(angle) / 2 + cWidth /2;
    float height = cHeight * side * cos(angle) / 2 + cHeight /2;

    [Points addObject:[NSNumber numberWithFloat:cWidth]];
    [Points addObject:[NSNumber numberWithFloat:cHeight]];
    NSArray *myarr = [[[NSArray alloc] initWithArray:Points ]autorelease ];

    return myarr;
}

Я использую приведенный ниже код для извлечения данных из функции:

NSArray *tt = [[ NSArray alloc] initWithArray:[self calcRose:3]     ];

Но каждый раз, когда я компилирую программу, она выдает ошибку.

Как я могу решить эту проблему?

Ответы [ 2 ]

3 голосов
/ 07 ноября 2011

[[NSMutableArray alloc ] arrayWithCapacity:2] определенно не так. Попробуйте [NSMutableArray arrayWithCapacity:2] вместо этого. Кроме того, вы можете просто использовать [[self calcRose:3] retain] вместо [[NSArray alloc] initWithArray:[self calcRose:3]], и вам нужен вызов retain, только если вы собираетесь хранить массив дольше, чем текущий проход цикла выполнения.

1 голос
/ 07 ноября 2011

Полагаю, вы упростили свой пример для целей вопроса, но, похоже, вы выполняете много ненужной работы.Код в вашем вопросе может быть переписан как:

-(NSArray *) calcRose : (float) theta 
{   
    int cWidth = 320;     
    int cHeight = 240;     

    return [NSArray arrayWithObjects:[NSNumber numberWithFloat:cWidth],[NSNumber numberWithFloat:cHeight],nil];        
} 

initWithCapacity, и использование изменяемого массива не даст вам ничего, кроме головной боли.Если вы хотите использовать изменяемый массив, просто создайте с помощью [NSMutableArray array], но не похоже, что вы добавляете столько объектов, поэтому предложенный мною метод будет лучше.

Этот метод возвращает автоматически освобожденный массив, поэтому ваш оператор вызова может быть просто

NSArray *tt = [self calcRose:3];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...