-1

我的问题与这个问题非常相似,但是我没有nil从我的问题中返回,NSMutableArray我已经分配并初始化了我的NSMutableArray. 我将如何name从索引处的对象中检索值Timeline,例如 3。类似于以下内容:

NSLog(@"tlresults: %@",(Timeline *)[tlresults objectAtIndex:3].name);

并返回索引 3 的 Timeline.name 值。

时间线.h

@interface Timeline : NSObject
{
    NSString *_name;
    NSInteger _up;
    NSInteger _down;
    NSInteger _timeofdatapoint;
}

@property (nonatomic,retain) NSString *name;
@property (nonatomic) NSInteger up;
@property (nonatomic) NSInteger down;
@property (nonatomic) NSInteger timeofdatapoint;

@end

时间线.m

#import "Timeline.h"

@implementation Timeline

@synthesize name = _name;
@synthesize up = _up;
@synthesize down = _down;
@synthesize timeofdatapoint = _timeofdatapoint;

@end

添加对象和测试检索的功能:

#import "Timeline.h"
...
NSMutableArray *tlresults = [[NSMutableArray alloc] init];

for (int i=0; i<10; i++) {

    Timeline *tlobj = [Timeline new];
    tlobj.name = username;
    tlobj.up = 2*i;
    tlobj.down = 5*i;
    tlobj.timeofdatapoint = 2300*i;

    [tlresults addObject:tlobj];
    [tlobj release];
}
NSLog(@"tlresults count: %d",[tlresults count]);
NSLog(@"marray tlresults: %@",(Timeline *)[tlresults objectAtIndex:3]);
...

输出:

tlresults count: 10
tlresults: Timeline: 0x7292eb0
4

2 回答 2

1

编写强制转换以便您可以访问类实例的声明属性的正确方法是:

NSLog(@"tlresults: %@",((Timeline *)[tlresults objectAtIndex:3]).name);

或者

NSLog(@"tlresults: %@",[(Timeline *)[tlresults objectAtIndex:3] name]);

或者,如果您需要访问很多属性:

Timeline *timelineAtIndex3 = [tlresults objectAtIndex:3];
NSLog(@"tlresults: %@", timelineAtIndex3.name);
于 2012-12-27T00:24:28.213 回答
0

您需要重写 description 方法来为将使用 NSLog() 打印的对象提供您自己的描述。
由于您没有重写此方法,因此它使用了 NSObject 的方法,它只打印对象的内存地址。

例如:

- (NSString*) description
{
    return [NSString stringWithFormat: @"Name: %@ up: %li down: %li time of data point: %li",_name,_up,_down,_timeofdatapoint);
}

此外,按照惯例,属性名称不应该是这样的:

@property (nonatomic) NSInteger timeofdatapoint;

但是这个:

@property (nonatomic) NSInteger timeOfDataPoint;
于 2012-12-26T22:59:31.507 回答