2014-02-11 32 views
0

我是Objective-C的新手,請耐心等待。創建後NSMutableArray對象爲空

我有一個名爲的UpdateData自定義對象:

@interface UpdateData : NSObject 
-(NSString*) getPath; 
-(void) setPath:(NSString*) path ; 
@end 

當我創建解析列表這個項目:

NSMutableArray *serverData = [[NSMutableArray alloc]init]; 
for (i = 1; i < [chunks count]; i++) {//chunks contains infor for parsing 
    UpdateData *ud = [[UpdateData alloc] init]; 
    NSString * element = [chunks objectAtIndex:i]; 
    [ud setPath: element]; 
    [serverData addObject:ud]; 
    NSLog(@"Path: %@",[[serverData lastObject] getPath]); 
} 

NSLog(@"Done parsing! Elements: %lu", [serverData count]); 

在這一循環中,的UpdateData(直接從陣列讀取)有價值。我得到以下輸出:

Path: path 
. 
. 
. 
Done parsing! Elements: x 

其中x大於0且等於解析的對象,path是解析的正確路徑。

同樣方法後來我嘗試去通過陣列讀取對象的值:

for (i = 0; i < [serverData count]; i++) { 
     UpdateData *ud = [serverData objectAtIndex:i]; 
     NSLog(@"Path: %@",[ud getPath]); 
} 

有輸出:

Path: 

值將丟失。 for循環背靠背,完全如上所示。

任何想法?

更新:

的updateData類:

#import "UpdateData.h" 

@implementation UpdateData 
NSString* [email protected]""; 

-(NSString*) getPath{ 
    return path; 
} 

-(void) setPath:(NSString*) newpath{ 
    path = newpath; 
} 
@end 

這是否初始化有關係嗎?應該被覆蓋的權利?

+1

Wha t是'getPath'幹什麼?順便說一下:Objecive-C中的Getters不是以'get'開始的。 – dasdom

+4

該錯誤似乎與您的UpdateData類,而不是NSMutableArray有關。請提供您的UpdateData類的代碼 – rist

+0

您的-getPath可能崩潰/拋出異常並退出。這可能是爲什麼你只能在控制檯輸出中看到第一個** Path **的原因。 –

回答

0

嘗試這樣的:(未經測試)

.h文件:

@interface UpdateData : NSObject 

@property (nonatomic, readonly) NSString *path; 

/*-(NSString*) getPath;*/ 
-(void) setPath:(NSString*) path ; 
@end 

.m file:

@interface UpdateData() 
@property (nonatomic, readwrite) NSString *path; 
@end 

@implementation UpdateData 
/* 
-(NSString*) getPath{ 
    return path; 
}*/ 

-(void) setPath:(NSString*) newpath{ 
    path = newpath; 
} 

@end 
+0

這真的讓我走上正路。 – javydreamercsw

2

聲明中這樣實施Path屬性:

#import "UpdateData.h" 

@implementation UpdateData { 
    NSString *_path; 
} 

-(NSString*) getPath{ 
    return _path; 
} 

-(void) setPath:(NSString*) newpath{ 
    _path = newpath; 
} 
@end 


由於Xcode的自動處理getter和setter。如果你不需要他們的任何其他內部類的目的。我建議你只在你的.h文件中使用此行,並刪除getter和setter方法:

@property (strong, nonatomic) NSString *path;