2014-02-27 4 views
0

plist 파일에서 데이터를 가져 오는 클래스가 있습니다.NSMutableArray에서 객체의 인스턴스 변수 가져 오기

@interface myClass : NSObject 
{ 
    NSString *string; 
} 

@property (copy) NSString *string; 

-(id)getData:(NSString *) a :(NSInteger) i; 

@end 

다음은 구현 예입니다.

@implementation myClass 

-(id)getData:(NSString *) a :(NSInteger) i 
{ 
    myClass *class = [[myClass alloc]init]; 

    NSString *path = [[NSBundle mainBundle] pathToResource:a ofType:@"plist"]; 

    NSArray *myArray = [[NSArray alloc] initWithContentsOfFile:path]; 

    class.string = [myArray objectAtIndex:i]; 

    return class; 
} 

내 방법 getData은 문자열과 정수 인수를 가지고 있습니다. 이 메서드는 for 루프 안에 배치되도록 만들어져 i 인수는 for 루프 인덱스가됩니다. 아래는 그 안에있는 방법입니다.

-(id)init 
{ 
    self = [super init]; 

    if (self) 
    { 
     //this is a NSMutableArray that i created in the .h file this method is in 
     list = [[NSMutableArray alloc]init]; 

     for(int i = 0; i < 5; i++) 
     {   
      [list addObject:[[[myClass alloc]init] getData: @"file" :i]]; 
     } 

     //this is a NSTextField that i create in the .h file that this init method is in 
     [instructions setStringValue:[list objectAtIndex:0].string]; 
    } 

    return self; 
} 

내가 내가 목록있는 NSMutableArray에 저장된 myClass.string 값의 지시에 NSTextField있는의 문자열 값을 설정해야합니다. 이것을 할 수있는 방법이 있습니까? 당신이, 그 객체의 인스턴스 변수를 통해 전달하지하거나 액세스하는 또 다른 방법이있다 않는 목록에서 개체를 저장할 때

내가 시도 할 때마다 [instructions setStringValue:[list objectAtIndex:0].string].

을 할까?

+0

다른 구문 시도 [[[objectAtIndex : 0] 문자열]] –

+0

코드가 깨졌습니다. 삽입 한 각각에 대해 두 개의 myClass 인스턴스를 생성한다. 그리고'string' 속성이 적절하게 유지된다는 것이 확실하지 않습니다. –

+0

코드가 효율적이지 않습니다. 동일한 파일을 반복해서로드하고 있습니다. 한 번만로드하십시오! – Merlevede

답변

0

는 여기에 처리 될 수있는 많은 일들이 있습니다

  1. 클래스는 예약 된 키워드가 그렇게 영향을 프로그램 여부 로컬 변수 이름으로 사용하지 않는 것입니다.
  2. 'list'가 강력한 변수인지 확인해야합니다.

이 사항이

self.list = [[NSMutableArray alloc] init]; 

이처럼 사용되어야한다 : 지침의 텍스트 필드가 함께 IBOutlet 및 것 같다 : 또한 그것은 자기 가

지금 당신의 문제에 오는

[self.instructions setStringValue:[[list objectAtIndex:0] string]]; 
를 사용하여 참조해야한다 당신은 항상 초기화되지 않는 init 메소드에 접근하려고 시도한다.

만약 당신이 windowController에 있다면, setStringValue는 windowDidLoad 메소드에 있어야합니다. viewController에 있으면 setStringValue가 loadView에 있어야합니다.

참고 : 텍스트 필드 값을 설정하기 전에 [super loadView]를 호출하십시오. 단일 파일이라면 for 루프에서 호출하는 것이 아니라 한 번로드하는 것이 좋습니다.

희망이 도움이됩니다.

+0

도움 주셔서 대단히 감사합니다. 나는 Objective-C와 Cocoa에 매우 새로운 것이다. –

관련 문제