2012-07-29 2 views
4

간단합니다.XCode 4.4 Auto @ XCode에서 자동 완성 @ 4.3 프로젝트

러닝 라이온.

  1. 난 그냥 엑스 코드 4.4
  2. 로 업그레이드 내 가장 최근의 엑스 코드 4.3 프로젝트 파일 코드
  3. 오류가 풍부의
  4. 주석 하나 @synthesize 라인을로드. :(
  5. 검증 컴파일러는 'LLVM 4.0'.로 설정되어

다음

내가 같은 테스트를했지만 엑스 코드 4.4 및 4.4 프로젝트 내에서 작동 @synthesize 짜잔! 자동차 내에서 새 프로젝트를 만들었습니다.

자동 코드에 추가 새로운 특성에 작동하는 것 같다 @synthesize. 그러나 기존의 이전 오류를 생성합니다.

누구나 다른 경험이? 내가 알아봐야 할 다른 것들?

정말 자동 생성 기능을 사용하고 싶습니다.

감사합니다.

+0

어쩌면 어쩌면 이미 해본 적이 있을지 모르겠지만 프로젝트를 청결하게 만들었습니까? – Abizern

+0

모든 파생 데이터를 지우거나 삭제했습니다. 나는 XCode 4.4가 4.3 프로젝트에 매달려있는 것을 모른다.

+0

Okay - 아마도 Modern Objective-C로 변환하는 옵션을 시도해보십시오 (편집 | 리팩터링 메뉴 아래에 있음) – Abizern

답변

5

오류는 속성을 선언하는 방식이 아니라 사용하는 방식대로입니다.

자동 합성 된 속성은 인 밑줄을 기본 저장소으로 만듭니다.코드에 따라서

당신이 속성이 선언이 같은 :

@property (nonatomic, strong) UILabel *sectorLabel; 

하고 자동 sythesize -이 같은입니다되는 자동 생성 컴파일러에 의해 당신을 위해 :

@synthesize sectorLabel = _sectorLabel; 

이제 다음 속성을 통해 액세스 할 수 있습니다.

self.sectorLabel; 

또는 d 직접적으로 :

_sectorLabel; 
1

해결했습니다!

그래서 내가 한 일입니다. ViewController.h

@interface ViewController : UIViewController 
// Public: 

@property (nonatomic, strong) UILabel *sectorLabel; 

@end 

ViewController.m

@implementation ViewController 

//@synthesize sectorLabel; 

그리고

는이 오류가 팝업.

ViewController.m : 48 : 2 : 선언되지 않은 식별자 'sectorLabel'사용; '_sectorLabel'을 의미합니까?

는 내가에 코드를 변경하는 순간 해결 : '. 자기'컴파일

self.sectorLabel 

엑스 코드 4.3과를 가지고 할 필요없이 잘 작동을 예어. 그러나 XCode 4.4는 그것에 대해 더욱 엄격 해졌습니다.

+0

Xcode의 새로운 엄격함을 좋아합니다. 업데이트 된 컴파일러는 어디에서나 더 엄격하며 훌륭한 작업을 수행합니다. – Fab1n

+0

답을 찾지 줘서 고마워요. –

+4

아니요,이 방법으로는 문제가 해결되지 않습니다. @synthesize를 생략하고 올바르게 완료되면 _sectorLabel을 계속 사용할 수 있어야합니다. – honcheng

0

대답의 문제점은 방금 self.property를 추가하여 코드의 동작을 변경했다는 것입니다.

ivar에 대한 속성 액세스는 두 가지 다른 점입니다. 정답은 밑줄을 추가하여 ivar을 올바르게 사용하도록 코드를 변경하는 것입니다.

이것은 xcode의 기본 속성 합성에 대한 변경 사항과 관련이 없습니다. 또한 대부분의 스타일 가이드에서 Apple은 _ivar 이름을 권장하지 않으므로 창 밖으로 볼 수 있습니다.

내 코드에는 자기 만 사용합니다. 내가 속성 getter와 setter를 통해 액세스하려고 할 때. 이 행동에 대한 기존 코드를 시간 낭비로 변경하지 마십시오.

+0

현재 권장되는 것은 직접 액세스를 통한 속성 사용을 선호하는 것입니다. – Abizern

+1

코드 일관성을 확인했지만, 모든 응용 프로그램에서 많이 발생하는 간단한 속성 액세스에 대해 objc_invoke 호출을 기꺼이 호출하지 않습니다. 구현의 내부적으로 속성 액세스 만 사용하여 보존 또는 dealloc 메서드의 값을 설정합니다. 그렇지 않으면 그저 성능에 영향을 미칩니다. 또한 접근 자 및 변형 자 (mutator)는 자동 생성되기 때문에 값의 간단한 액세스 외에도 내부적 인 동작이 없으므로 내부적으로 사용할 이유가 없습니다. 그냥 내 의견. 나는 또한 그들이 접두어를 기본값으로 사용하지 않았 으면 좋겠다. –

+0

@stackmonster 프로파일 링이 앱에서 병목 현상을 일으키고 있다는 것을 나타내지 않는 한 그 "성능"히트에 관심을 가질 이유가 없습니다. 조기 최적화는 해결할 수있는 것보다 훨씬 많은 문제를 일으키며,이 경우 오버 헤드는 매우 적습니다. –