That particular warning comes up when you provide an object of a type that is different from the one that was expected.
In this case, touchesForView:
expects a UIView
object, but you are passing it an object of whatever type self
happens to be in this code.
In order to make the warning go away, you can either pass an object of the correct type, or you can force the compiler to cast your self
pointer to the correct type:
if ([touches count] == [[event touchesForView:(UIView *)self] count])
Be warned, however, that if self
does not behave like a UIView
, you could be setting yourself up for subtle errors down the road.
update:
I did a quick search, and found this article, which has some excellent guidelines for dealing with Cocoa warnings, and their common causes.
Based on that information, I want to quickly lay out what should be happening with the code you posted. I'm assuming that you created a new iPhone app using the template from Xcode, and that the application has a single UIView
(as seen in Interface Builder).
To use the code you posted, you would created a custom UIView
subclass as follows:
// YourViewClass.h:
@interface YourViewClass : UIView // Note #1
{
}
@end
// YourViewClass.m:
@import "YourViewClass.h" // Note #2
@implementation YourViewClass
- (void) touchesEnded:(NSSet*)touches withEvent:(UIEvent*)event
{
if ([touches count] == [[event touchesForView:self] count])
{
// last finger has lifted....
}
}
@end
And in Interface Builder, you would set the type of the view
object to YourViewClass
, and then you should be good to go.
With the code laid out as I have shown above, you should not be getting that warning. This leads me to think that one of the steps above has not been done properly. For starters, be sure that:
- Your
self
object is actually a UIView
subclass (note #1)
- You
#import
the header for your class in the source file (note #2)