【问题标题】:issue adding NSMutablearray to other NSMutablearray? [duplicate]将 NSMutablearray 添加到其他 NSMutablearray 的问题? [复制]
【发布时间】:2012-05-29 05:05:51
【问题描述】:

我正在尝试将 NSMutableArray 添加到其他 NSMutableArray,这是一个设置为实例 ivar 的可变数组,但我总是将数组 arrayPlayoff 设为空。我检测到的另一件事是,在附加方法中进行调试时,局部变量不会显示在调试器变量部分中,即使选择“本地”选项也是如此。

-(void)loadGamesPlayoffs{

    NSMutableArray *eli1 = [[NSMutableArray alloc] init];

    NSMutableArray *eli2 =[[NSMutableArray alloc] init];

    NSMutableArray *eli3 = [[NSMutableArray alloc] init];

    NSMutableArray *eli4 = [[NSMutableArray alloc] init];

    for (NSDictionary *eliminatoria in copaReyArray){

        int eli = [[eliminatoria valueForKey:@"eliminatoria"]integerValue];

        NSLog(@"eli %d", eli);

        if (eli==1){

            [eli1 addObject:eliminatoria];

        } else if (eli==2){

            [eli2 addObject:eliminatoria];

        }else if (eli==3){

            [eli3 addObject:eliminatoria];

        } else if (eli==4){

            [eli4 addObject:eliminatoria];

        }


    }


    [arrayPlayOff addObject:eli1];

    [arrayPlayOff addObject:eli2];

    [arrayPlayOff addObject:eli3];

    [arrayPlayOff addObject:eli4];


   }

 many thanks   

【问题讨论】:

  • 好像你没有初始化 arrayPlayOff 导致问题?
  • 各位,非常感谢!你可以发布你的答案来投票给你吗?我错误地认为 ivar 不需要初始化.....
  • @theomen -- “初始化变量”(将其设置为某个已知值)与创建变量要指向的对象之间存在很大差异。 Objective-C 中的所有 ivars 都会自动“初始化”,因为它们在创建对象时被设置为零/nil。但如果 ivar 旨在寻址一个对象,例如 NSArray,则该对象是创建的。

标签: objective-c ios5


【解决方案1】:

如果 arrayPlayOff 是您可以使用属性的实例变量,您的 .h 应该如下所示:

#import <UIKit/UIKit.h>
@interface YourClassViewController : UIViewController{
   NSMutableArray *arrayPlayOff;
   //Some other variables
}

@property (nonatomic, retain) NSMutableArray *arrayPlayOff;

//Some other methods

@end

然后在你的 .m 文件中你可以使用:

@implementation YourClassViewController

@synthesize arrayPlayOff;

- (NSMutableArray *)arrayPlayOff{
  if(!arrayPlayOff){
    arrayPlayOff = [[NSMutableArray alloc] init];
  }
  return arrayPlayOff;
}

//Your other methods

//Overwrite the dealloc function so you don't have any memory leaks
- (void)dealloc{
  [arrayPlayOff release];
  [super dealloc];
}

@end

现在你可以访问你的变量了

self.arrayPlayOff

这样您就可以 100% 确定您的变量始终被初始化。

您的方法可能如下所示(此外,您应该释放您的其他 NSMutableArrays,因为在将它们添加到 arrayPlayOff 数组后您没有使用它们):

-(void)loadGamesPlayoffs{

    NSMutableArray *eli1 = [[NSMutableArray alloc] init];

    NSMutableArray *eli2 =[[NSMutableArray alloc] init];

    NSMutableArray *eli3 = [[NSMutableArray alloc] init];

    NSMutableArray *eli4 = [[NSMutableArray alloc] init];

    for (NSDictionary *eliminatoria in copaReyArray){

        int eli = [[eliminatoria valueForKey:@"eliminatoria"]integerValue];

        NSLog(@"eli %d", eli);

        if (eli==1){

            [eli1 addObject:eliminatoria];

        } else if (eli==2){

            [eli2 addObject:eliminatoria];

        }else if (eli==3){

            [eli3 addObject:eliminatoria];

        } else if (eli==4){

            [eli4 addObject:eliminatoria];

        }


    }


    [self.arrayPlayOff addObject:eli1];

    [self.arrayPlayOff addObject:eli2];

    [self.arrayPlayOff addObject:eli3];

    [self.arrayPlayOff addObject:eli4];

    //Releasing the NSMutableArrays
    [eli1 release]; 
    [eli2 release]; 
    [eli3 release]; 
    [eli4 release];

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多