0

我目前正在研究一个分为两个类的项目,“Array”类和“PPCalcVals”类。因为将要添加的其他类也必须访问数组,所以我认为最好编写数组类,其中包含 NSMutableArray 和所有其他的子类(从 PPCalcVals 类开始。所以 'PPCalcVals ' 类需要访问超类 'Array' 中的数组元素。(如果这是错误的方法,请纠正我)。如前所述,整个程序是用 C 编写的并且运行良好,但要创建一个 GUI 并最终创建一个 OSX或 IOS 应用程序,我开始使用 Objecitve C 学习 OOProgramming。无论如何,当我引用超类数组中的对象时,唯一打印的值是“null” 这不是我真正想要的。这是代码:

主程序:

#import <Foundation/Foundation.h>
#import "Array.h"
#import "PPCalcVals.h"

int main(int argc, const char * argv[])
{
@autoreleasepool
{
    Array *prices = [[Array alloc]initWithName:@0];
    PPCalcVals *myVals = [[PPCalcVals alloc]init];

    [prices addValue:@12];
    [prices addValue:@13];
    [prices addValue:@14];
    [prices addValue:@15];
    [prices addValue:@15];

    [prices print];
    [myVals print];
}
return 0;
}

数组.h 文件:

#import <Foundation/Foundation.h>

@interface Array : NSObject

{
NSMutableArray *prices;
}

-(id) initWithName: (NSNumber *) values;
-(void) addValue: (NSNumber *) value;
-(void) print;
-(NSMutableArray *) prices;

@end

数组.m

#import "Array.h"

@implementation Array

-(id) initWithName:(NSNumber *)values
{
self = [super init];

if(self)
{
    prices = [NSMutableArray array];
}
return self;
}
-(void) addValue: (NSNumber *) value
{
[prices addObject:value];
} 
-(void) print
{
NSLog(@"%@",prices);
}
-(NSMutableArray *)prices
{
return prices;
}

@end

PPCalcVals.h:

#import "Array.h"

@interface PPCalcVals : Array

@property id high,low,open,close;

-(void) setHigh:(NSMutableArray *)h setLow:(NSMutableArray *)l;     //set high and low      
-(void) setOpen:(NSMutableArray *)o setClose:(NSMutableArray *)c;   //set open and close   
-(void) sort;                                                       //sort array
-(void) print;                                                      //debugging tool

@结尾

PPCalcVals.m:

#import "PPCalcVals.h"

@implementation PPCalcVals

@synthesize high,low,open,close;

-(void) setOpen:(NSMutableArray *)o setClose:(NSMutableArray *)c
{
o = prices[0];
c = prices[2];
open = o;
close = c;
}
-(void) sort;
{
[prices sortedArrayUsingComparator:^(NSString *str1, NSString *str2) {
    return [str1 compare:str2 options:NSNumericSearch];
}];
}

-(void) setHigh:(NSMutableArray *)h setLow:(NSMutableArray *)
{
h = prices[0];
l = prices[2];
high = h;
low = l;
}
-(void) print
{
NSLog(@"open:  %@",open);
NSLog(@"close: %@",close);
NSLog(@"high:  %@",high);
NSLog(@"low:   %@",low);
}

@end

正在运行的程序仅输出:

2013-08-05 10:21:08.546 prog1[1314:303] (
12,
13,
14,
15,
15
)
open:  (null)
close: (null)
high:  (null)
low:   (null)

我意识到这可能是一个非常基本的问题,但我非常感谢您的帮助,如果您阅读到这一点,我已经感谢您;)

4

2 回答 2

2

您创建了两个不同的、完全不相关的对象pricesmyVals

Array *prices = [[Array alloc]initWithName:@0];
PPCalcVals *myVals = [[PPCalcVals alloc]init];

您可能的意思是创建一个PPCalcVals对象(从超类继承所有方法Array):

PPCalcVals *prices = [[PPCalcVals alloc]init];

[prices addValue:@12];  // invokes `addValue` method from superclass "Array"
// ...
[prices print];         // invokes `print` method from "PPCalcVals"

您还必须以init在超类PPCalcVals中调用“指定初始化程序”的方式initWithName在类中实现。

于 2013-08-05T12:03:54.060 回答
0

我有一个问题。你在哪里调用函数

-(void) setHigh:(NSMutableArray *)h setLow:(NSMutableArray *)l;
-(void) setOpen:(NSMutableArray *)o setClose:(NSMutableArray *)c;

因为我只能看到这些函数没有被调用。所以属性 high、low、open 和 close 尚未分配,因此它们返回 Null。

我也可以知道您为什么要覆盖上述函数中的参数吗?

o = prices[0];
c = prices[2];

h = prices[0];
l = prices[2];
于 2013-08-05T12:47:18.607 回答