2014-08-31 220 views
0

我主要用Java編程,無法理解爲什麼這不起作用。我正在嘗試在for循環中創建一個臨時對象「Judge」。然後我想將該對象添加到一個NSMutableArray,所以最後我有一個數組填充了不同的Judge對象。在循環之後,我遍歷數組中的所有對象,它們都是最後一個判斷對象。將自定義對象添加到NSMutableArray

NSLog顯示在for循環中「JudgeTemp」對象正在分配正確的值。我的猜測是,它不是每次創建一個名爲JudgeTemp的新對象,而是引用已經創建的舊JudgeTemp。

NSMutableArray *Judges = [NSMutableArray arrayWithCapacity:30]; 

for (int i=0; i<[courtinfoarray count]; i++) { 
    Judge1= [[courtinfoarray objectAtIndex:i] componentsSeparatedByString:@"|"]; 

    Judge *JudgeTemp=[[Judge alloc]init]; 

    [JudgeTemp setName:[Judge1 objectAtIndex:0] picture:[Judge1 objectAtIndex:1] courtroom:[Judge1 objectAtIndex:2] phone:[Judge1 objectAtIndex:3] undergrad:[Judge1 objectAtIndex:4] lawschool:[Judge1 objectAtIndex:5] opdasa:[Judge1 objectAtIndex:6] career:[Judge1 objectAtIndex:7] judgecode:[Judge1 objectAtIndex:8]]; 

    NSLog(@"%@",[JudgeTemp getName]); 
    [Judges addObject:JudgeTemp]; 
    NSLog(@"%@",[[Judges objectAtIndex:i]getName]); 

} 

法官類

@implementation Judge 

NSString *name; 
NSString *picture; 
NSString *courtroom; 
NSString *phone; 
NSString *undergrad; 
NSString *lawschool; 
NSString *opdasa; 
NSString *career; 
NSString *judgecommentcode; 


-(void) setName:(NSString *)n picture:(NSString *) p courtroom:(NSString *)c phone:(NSString *)ph undergrad: (NSString *) u lawschool: (NSString *)l opdasa: (NSString *) o career: (NSString *)ca judgecode: (NSString *)jcode{ 

name = n; 
picture = p; 
courtroom = c; 
phone = ph; 
undergrad = u; 
lawschool = l; 
opdasa = o; 
career = ca; 
judgecommentcode = jcode; 

} 
-(NSString*) getName{ 

return name; 
} 
+0

您正在創建具有相同數據的所有對象,那麼如何知道它們是同一個對象?看起來你應該得到不同的對象,但是如果你已經做出判斷一個單身或者用對象創建過程中的其他方法,那麼你每次都可能得到同一個對象。 – Caleb 2014-08-31 15:41:10

+0

他們並不都具有相同的數據(他/她在每次迭代時記錄結果並表示他們沒有),並且在這裏似乎沒有單身或類似的東西。 – Dima 2014-08-31 15:45:06

+0

我在for循環之後通過Judges數組運行,每個對象都是for循環中創建的最後一個對象。其他答案似乎指向添加[JudgeTemp發佈],但我不能在ARC中這樣做。我還應該提到「Judge1」變量名稱很差,但是它是一個NSStrings數組。 – user3157910 2014-08-31 15:45:31

回答

3

問題是與你的Judge類。當您直接在您的@implementation中定義變量時,它們具有全局作用域,而不是實例變量。你需要做的就是把這些變量聲明在@interface而不是什麼:

@interface Judge : NSObject { 
    NSString *name; 
    NSString *picture; 
    NSString *courtroom; 
    NSString *phone; 
    NSString *undergrad; 
    NSString *lawschool; 
    NSString *opdasa; 
    NSString *career; 
    NSString *judgecommentcode; 
} 

// ... 

@end 

編輯:顯然,你可以@implementation聲明它們,你只需要包起來{ }。請參閱:Instance variables declared in ObjC implementation file

+0

這奏效了! – user3157910 2014-08-31 16:54:52

相關問題