我无法将NSArray作为函数的返回值

时间:2011-11-07 11:29:29

标签: objective-c nsarray

我试图从一个名为

的函数中获取基于点的结构
-(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 个答案:

答案 0 :(得分:3)

[[NSMutableArray alloc ] arrayWithCapacity:2]肯定是错的。请尝试使用[NSMutableArray arrayWithCapacity:2]。此外,您可以使用[[self calcRose:3] retain]而不是[[NSArray alloc] initWithArray:[self calcRose:3]],如果您打算将数组保持的时间超过当前的runloop传递,则只需要retain调用。

答案 1 :(得分:1)

我猜你为了问题的目的简化了你的样本,但你似乎做了很多不必要的工作。您问题中的代码可以重写为:

-(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];