铸造问题(或者说不铸造)

时间:2011-05-04 16:21:26

标签: iphone objective-c cocoa-touch casting

我想这是非常基本的。

我从xCode收到两个相关的警告。两者都说我试图在没有强制转换的情况下从整数制作指针。我怎样才能满足xCode?

这是我的代码:

int tempCurrentPage = currentPageCounter;
[self tabAdd:@"New tab!" inColour:@"Red" withReference:tempCurrentPage];

注意:currentPageCounter是NSUInteger currentPageCounter;

我的方法如下:

-(void)tabAdd:(NSString *)newTabTitle inColour:(NSString *)newTabColour withReference:(int *)newTabReference
{

    NSLog(@"#string about to be added:%@", newTabTitle);
    [[[self.myLibrary objectAtIndex:currentBookNumber] tabTitles] addObject:newTabTitle];

    NSLog(@"#string about to be added:%@", newTabColour);
    [[[self.myLibrary objectAtIndex:currentBookNumber] tabColours] addObject:newTabColour];

    NSLog(@"#string about to be added:%@", newTabReference);
    [[[self.myLibrary objectAtIndex:currentBookNumber] tabReference] addObject:[NSNumber numberWithInteger:newTabReference]];       

}

我该怎么做演员?

3 个答案:

答案 0 :(得分:3)

withReference期待int *,但您传递的是int。这是一个潜在的错误,可能会导致程序崩溃。看来你在方法中不需要指向整数的指针,只需传递一个整数即可。

// remove the pointer for newTabRefenerce
-(void)tabAdd:(NSString *)newTabTitle inColour:(NSString *)newTabColour withReference:(int)newTabReference

// newTabReference is integer, do use %d. %@ is for NSString
NSLog(@"#string about to be added:%d", newTabReference);

答案 1 :(得分:2)

你正在传递指向整数的指针:

-(void)tabAdd:(NSString *)newTabTitle inColour:(NSString *)newTabColour withReference:(int *)newTabReference

更改为:

-(void)tabAdd:(NSString *)newTabTitle inColour:(NSString *)newTabColour withReference:(NSUInteger)newTabReference

并在选择器调用中直接传递currentPageCounter:

[self tabAdd:@"New tab!" inColour:@"Red" withReference:currentPageCounter];

答案 2 :(得分:1)

投放的广告素材应该是(int)而不是(int*)。当您记录newTabReference时,请使用%d而不是%@进行记录。