在arc中不允许将nsinteger(又名'int')强制转换为nsdictionary

时间:2013-08-06 07:30:05

标签: objective-c int automatic-ref-counting nsdictionary

-(IBAction)tapOnLikerImage:(UITapGestureRecognizer*)gestureRecognizer {
    AsyncImageView *likerImageView = (AsyncImageView*)[gestureRecognizer view ];
    NSDictionary * likerdetail = [(NSDictionary*)(likerImageView.tag) retain];
    NSLog(@"frndDetDict2 %@",[(NSDictionary*)(likerImageView.tag) retain]);
}

1 个答案:

答案 0 :(得分:0)

您正在传递一个整数,您应该传递一个Objective C对象指针。您可能希望从数组中获取字典。

另外,您的保留释放呼叫操作不正确。保留在NSDictionary * likerdetail = [(NSDictionary*)(likerImageView.tag) retain];是正常的,NSLog(@"frndDetDict2 %@",[(NSDictionary*)(likerImageView.tag) retain]);处的保留不是。

更好的方法(非ARC):

-(IBAction)tapOnLikerImage:(UITapGestureRecognizer*)gestureRecognizer {
    AsyncImageView *likerImageView = (AsyncImageView*)[gestureRecognizer view];

    NSDictionary *likerdetail = [[anArray objectAtIndex:(likerImageView.tag)] retain];

    NSLog(@"frndDetDict2 %@", likerdetail);

    [likerdetail release];
}

对于ARC代码:

-(IBAction)tapOnLikerImage:(UITapGestureRecognizer*)gestureRecognizer {
    AsyncImageView *likerImageView = (AsyncImageView*)[gestureRecognizer view];

    NSDictionary *likerdetail = [anArray objectAtIndex:(likerImageView.tag)];

    NSLog(@"frndDetDict2 %@", likerdetail);
}

请注意ARC代码上没有任何保留和释放:ARC会自动为您处理此问题。