我是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
这种初始化是否重要?应该被覆盖吗?
答案 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