2012-06-16 77 views
0

我已經構建了一個對象數組,這是從我之前編寫的一個類創建的。我只是想獲得一些類變量,而通過數組循環:不良訪問代碼1:訪問對象實例變量

- (void)viewDidLoad 
{ 
     [super viewDidLoad]; 

     NSMutableArray *medicalCenters = [(AppDelegate *)[[UIApplication sharedApplication] delegate] medicalCenters]; 

     for (MedicalCenter *row in medicalCenters){ 
      NSString *latitude = row.MCLatitude; 
      NSLog(@"%@", latitude); 
     } 
} 

我創建這個樣子的類文件:

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

@interface MedicalCenter : NSObject 
{ 
    CLLocationCoordinate2D _coordinate; 
} 

@property (nonatomic, strong) NSString *medicalCenter; 
@property (nonatomic, assign) NSString *MCLatitude; 
@property (nonatomic, assign) NSString *MCLongitude; 
@property (nonatomic, readonly) CLLocationCoordinate2D coordinate; 

- (id)initWithName:(NSString *)medicalCenter coordinate:(CLLocationCoordinate2D)coordinate; 

@end 

每當我建立起來的NSString *latitude = row.MCLatitude,我得到了該消息: Bad_excess代碼:1

但是,當我只列出陣列medicalCenters中的對象,我可以看到他們所有............ 我錯過了重要的東西嗎?

感謝 塞巴斯蒂安

+1

爲什麼在'MCLatitude'和'MCLongitude'中使用'assign'? –

回答

1

這是因爲記性不好管理,MCLatitudeMCLongitude屬性設置與(分配),他們沒有被正確地保留,不知道你將它們設置爲分配的原因,沒有我能看到的理由,所以如果你將它們改爲強大的,並使用setter來賦值,那應該沒問題。

@property (nonatomic, strong) NSString *MCLatitude; 
@property (nonatomic, strong) NSString *MCLongitude; 
+0

謝謝你們......在我將MCLatitude作爲字符串var之前,我將它聲明爲int。因此具有分配屬性。我只是改變了代碼,現在它工作得很好!謝謝大家 – konturgestaltung

+1

對於NSString,你通常應該使用'copy'而不是'strong'。如果另一個類也有一個指向同一個字符串的指針並進行更改,則不希望字符串值意外更改。經驗法則是,對於任何具有可變對象(即NSMutableString,NSMutableArray)的類,您都應該「複製」它們。 – afrederick