Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c NSMutableArray addObject未添加对象,对象已分配_Objective C_Cocoa Touch_Ios_Nsmutablearray - Fatal编程技术网

Objective c NSMutableArray addObject未添加对象,对象已分配

Objective c NSMutableArray addObject未添加对象,对象已分配,objective-c,cocoa-touch,ios,nsmutablearray,Objective C,Cocoa Touch,Ios,Nsmutablearray,我试图在NSMutableArray上使用我创建的名为Position的类addObject:。根据日志,我添加到数组中的Position实例不是nil——我可以将其属性输出到日志中。但是,数组似乎从未实际占据位置 @implementation Position @synthesize tradeDirection, instrument, quantity, fill, profit, positive, index; -(id)initWithArray:(NSArray*)data

我试图在
NSMutableArray
上使用我创建的名为
Position
的类
addObject:
。根据日志,我添加到数组中的
Position
实例不是
nil
——我可以将其属性输出到日志中。但是,数组似乎从未实际占据
位置

@implementation Position

@synthesize tradeDirection, instrument, quantity, fill, profit, positive, index;

-(id)initWithArray:(NSArray*)data
{
    self = [super init];
    if (self)
    {
        self.tradeDirection = [data objectAtIndex:0];
        self.instrument     = [data objectAtIndex:1];
        self.quantity       = [data objectAtIndex:2];
        self.fill           = (NSNumber*)[data objectAtIndex:3];
        self.profit         = [data objectAtIndex:4];
        self.positive       = [@"True" isEqualToString:[data objectAtIndex:5]];
        self.index          = (NSNumber*)[data objectAtIndex:6];
    }
    return self;
}

+(Position*)createPositionWithString:(NSString*)data
{
    return [[[self alloc] initWithArray:[data componentsSeparatedByString:@"#"]] autorelease];
}

@end
加载位置:数据方法
-(void)加载位置:(NSString*)数据
{
TT_安全释放_(_位置);
NSArray*dataArray=[data componentsSeparatedByString:@];“];

对于(inti=2;iTT_RELEASE_安全地向其参数发送一条RELEASE消息,然后再将其分配给nil(IIRC)。为什么_位置为nil会让人感到意外

无论出于何种原因,您可能需要释放_positions,但必须先分配和初始化新对象,并将其引用分配给_positions,然后才能向其添加项目

编辑:正如Luke在评论中指出的,TT_RELEASE_安全地来自three20库

#define TT_RELEASE_SAFELY(__POINTER) { [__POINTER release]; __POINTER = nil; }

TT_RELEASE_宏在将参数赋值为nil(IIRC)之前安全地向其参数发送一条RELEASE消息。为什么_位置为nil会让人感到意外

无论出于何种原因,您可能需要释放_positions,但必须先分配和初始化新对象,并将其引用分配给_positions,然后才能向其添加项目

编辑:正如Luke在评论中指出的,TT_RELEASE_安全地来自three20库

#define TT_RELEASE_SAFELY(__POINTER) { [__POINTER release]; __POINTER = nil; }

你在哪里创建_positions数组?几乎可以肯定你没有正确地实例化/保留_positions数组。需要查看更多关于此位的代码,因为你发布的其他内容看起来都很好。你在哪里创建_positions数组?几乎可以肯定你没有正确地实例化/保留_positions数组。需要查看更多c围绕这一点的ode和您发布的其他内容看起来都不错。这一点。如果使用非标准库代码(例如TT_RELEASE_安全,这是来自Three20库吗?)这有助于解释它的作用。不是每个人都使用这些库。啊,是的,将对象设置为nil导致对象为nil的及时编程范例经典。我的评论实际上是针对OP的,但感谢您的澄清。这一点。如果使用非标准库代码,我是否可以补充一下(例如TT_RELEASE_safety,这是Three20库中的吗?)这有助于解释它的功能。不是每个人都使用这些库。啊,是的,将对象设置为nil导致对象为nil的及时编程范例经典。我的评论实际上是针对OP的,但感谢澄清。