创建后NSMutableArray对象为空

时间:2014-02-11 17:49:55

标签: objective-c nsmutablearray

我是Objective-C的新手,所以请耐心等待。

我有一个名为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* path=@"";

-(NSString*) getPath{
    return path;
}

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

这种初始化是否重要?应该被覆盖吗?

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分:0)

尝试这样:(未经测试)

.h档案:

@interface UpdateData : NSObject

@property (nonatomic, readonly) NSString *path;

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

.m档案:

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

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

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

@end