전역 int 변수에 점수가 저장되어 있습니다. 나는 게임이 끝날 때마다 모든 새로운 점수를 배열에 추가하고 싶었습니다. 따라서 코드는 다음과 같습니다.
@implementation MainScene{
NSInteger *_scorevalue;
NSMutableArray *_scores;
}
didLoad 메소드에서 :
[[NSUserDefaults standardUserDefaults] setObject:_scores forKey:@"gameScores"];
_scorevalue의 값은 게임 중에 변경됩니다 (객체가 충돌하지만 중요하지 않은 경우).
_scorevalue=_scorevalue + 10;
게임이 끝나면 :
[_scores addObject:_scorevalue];
Xcode는 여기서 "비 Objective-C 포인터 유형 int를 유형 id의 매개 변수로 암시 적 변환"문제를 보여줍니다.
_scorevalue 유형을 구현에서 부동으로 변경하려고했습니다 (동일한 결과). 그러나 NSNumber를 대신 사용하면 문제가 거의 [_scores addObject:_scorevalue];
사라지고 다음과 같은 새로운 문제가 나타납니다 _scorevalue=_scorevalue + 10;
. "이 아키텍처 및 플랫폼에 대해 일정한 크기가 아닌 NSNumber 인터페이스에 대한 포인터의 산술".
설명해 주시겠습니까? 그게 다야?!
Rob의 대답에 대한 편집 :
구현 :
NSInteger _scorevalue;
게임이 끝나면 :
NSNumber *_scoreNumber= [NSNumber numberWithInteger:@(_scorevalue)]; // Xcode shows warning:
// "Incompatible pointer to integer conversion sending NSNumber to parameter of type NSInteger(aka // int)"
[_scores addObject:_scoreNumber];
편집 : nburk가 보여 주듯이 (경고 없음) :
[_scores addObject:@(_scorevalue];)
NSInteger *_scorevalue;
정수에 대한 포인터입니다. 당신은 단지 정수를 의미했습니다. 을 제거합니다 *
.
또한 정수를 NSMutableArray
. 당신은에 그것을 상자에 필요 NSNumber
등 @(_scorevalue)
.
이것은 속성을 구현하는 좋은 방법이 아닙니다. 사용 @property
:
@interface MainScene ()
@property(nonatomic, readwrite, strong) NSMutableArray *scores;
@property(nonatomic, readwrite, assign) NSInteger score;
@end
속성을 통해 이들에 액세스하는 습관을들이십시오 : self.scores
및 self.score
. 직접 ivar 액세스는 ARC에서도 ObjC에서 좋은 생각이 아닙니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다