2009-06-30 3 views
2

다음과 같은 목표 C 클래스가 있습니다.목표 C 클래스 초기화 오류

Film film = [[Film alloc] init]; 

나는 다음과 같은 오류를 얻을 : 가변 sizedobject가 초기화되지 않을 수 있습니다 나는이 클래스의 객체를 만들려고 할 때마다 그것은 영화 스타일 설정, 제목 장소의 ID 등의 영화에 대한 정보를 저장하는 것입니다 , Objective-C 클래스 "Film"의 정적으로 할당 된 인스턴스, Objective-C 클래스 "Film"의 인스턴스를 정적으로 할당.

저는 Objective C에 꽤 익숙하며 아마도 C# 사고 방식에 머물러 있습니다. 아무도 내가 뭘 잘못하고 있다고 말할 수 있습니까?

감사 마이클

코드 :

// Film.m 
#import "Film.h" 
static NSUInteger currentID = -1; 

@implementation Film 

@synthesize filmID, title, venueID; 

-(id)init { 

    self = [super init]; 

    if(self != nil) { 
     if (currentID == -1) 
     { 
      currentID = 1; 
     } 
     filmID = currentID; 
     currentID++; 
     title = [[NSString alloc] init]; 
     venueID = 0; 
    } 

    return self; 
} 

-(void)dealloc { 

    [title release]; 
    [super dealloc]; 
} 

+(NSUInteger)getCurrentID { 
    return currentID; 
} 

+(void)setCurrentID:(NSUInteger)value { 
    if (currentID != value) { 
     currentID = value; 
    } 
} 

@end 

// Film.h 
#import <Foundation/Foundation.h> 


@interface Film : NSObject { 
    NSUInteger filmID; 
    NSString *title; 
    NSUInteger venueID; 
} 

+ (NSUInteger)getCurrentID; 
+ (void)setCurrentID:(NSUInteger)value; 

@property (nonatomic) NSUInteger filmID; 
@property (nonatomic, copy) NSString *title; 
@property (nonatomic) NSUInteger venueID; 

//Initializers 
-(id)init; 

@end 
+0

잘못된 형식에 대해 미안하지만 아직 여기 코드 블록을 만드는 방법을 알지 못합니다 –

답변

5

당신은 참조 형식이어야하는 개체에 대한 참조를 보유하고 당신의 변수가 필요합니다. 당신은 별표 (*)를 사용하여이 작업을 수행 - 아래 참조 :

Film *film = [[Film alloc] init]; 

자바에서 오는 나는 종종 위의 생각 :

Film* film = [[Film alloc] init]; 

나는 형과 함께 '참조'마커를 연결하는 경향이있다. 하지만 C/C++/ObjC에 더 정통한 누군가가 왜 이것이 잘못된지, 그리고이 상황에서 '별표'가 실제로 무엇이라고 불리는 지 알려줄 것입니다.

+0

천재에 감사드립니다. 난 아직도 완전히 포인터를 이해하지 않는다, 메모리 관리는 C#에서 당신을 위해 처리됩니다. –

+3

@teabot : C/C++ 세계에서 왔을 때, 나는 이것을 참조가 아닌 포인터라고 부릅니다. 즉 : "필름은 클래스 영화의 인스턴스에 대한 포인터입니다." 참조는 C++에만 해당되며 '*'대신 '&'를 사용합니다. Objective-C에서는 모든 객체 변수가 포인터 여야하기 때문에 일반적으로 "film"은 Film 클래스의 인스턴스입니다. –

+0

@eJames 정보 주셔서 감사합니다. – teabot