2014-02-27 58 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-loop索引。下面是它意味着在裏面的方法。

-(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說明的NSTextField到myClass.string值的字符串值。有沒有辦法做到這一點?

每次我試圖做[instructions setStringValue:[list objectAtIndex:0].string].

當存儲對象的列表,它不能超過這個對象的實例變量攜帶或有另一種方式來訪問它們?

+0

嘗試不同的語法'[[list objectAtIndex:0] string]' –

+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非常陌生。 –