While working on one multiplayer game for iOS using GameKit, I faced issue while comparing object.
For single player version I was not facing this issue but while running multiplayer version I was facing this issue. After debugging a little I realised condition for comparing object's value is failing and it turned out that I was comparing object's address rather then its value. As for Multiplayer game I was creating object using data from server/host, I needed to compare object's value and not its address.
For objectiveC, if you want to compare object's value using "==" operator, you need to overload isEqual and hash method as shown like below.
-(BOOL)isEqual:(id) other { if (other == self) return YES; if (!other || ![other isKindOfClass:[self class]]) return NO; Card* otherCard = other; return ( mSuit == otherCard.mSuit && mRank == otherCard.mRank); } - (NSUInteger)hash { NSUInteger hash = 0; hash += [[NSNumber numberWithInt:mSuit] hash]; hash += [[NSNumber numberWithInt:mRank] hash]; return hash; }Note that you need to overload both method together, overloading only one will not work. Once I overloaded above method my multiplayer version started working as normal.
No comments:
Post a Comment