【问题标题】:cast of nsinteger (aka 'int') to nsdictionary is disallowed in arcarc 中不允许将 nsinteger(又名“int”)转换为 nsdictionary
【发布时间】:2013-08-06 07:30:05
【问题描述】:
-(IBAction)tapOnLikerImage:(UITapGestureRecognizer*)gestureRecognizer {
AsyncImageView *likerImageView = (AsyncImageView*)[gestureRecognizer view ];
NSDictionary * likerdetail = [(NSDictionary*)(likerImageView.tag) retain];
NSLog(@"frndDetDict2 %@",[(NSDictionary*)(likerImageView.tag) retain]);
}
【问题讨论】:
标签:
objective-c
int
automatic-ref-counting
nsdictionary
【解决方案1】:
你正在传递一个整数,你应该传递一个 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 会自动为您处理。