addObjectsFromArray:不复制到全局NSMutableArray

时间:2011-12-21 09:46:16

标签: objective-c ios cocoa-touch nsmutablearray nsarray

所以这是相关代码的部分样本。

static NSMutableArray *radioInputArray;
static NSMutableArray *buttonsArray;


- (IBAction)lookForRadioButtons:(id)sender {
    //  NSLog(@"Testing");
    NSError *error;
    NSString *radiostr = [NSString stringWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"getRadios" ofType:@"txt"] encoding:NSASCIIStringEncoding error: &error] ;
    if (radiostr == nil)
    {
        NSLog (@"Error! %@", error);
    }
    else
    {
        NSLog(@"%@",radiostr);
        NSString *radiotxt=  [webView stringByEvaluatingJavaScriptFromString:radiostr];
        NSLog(@"%@", radiotxt);
        NSArray *myRadios = [radiotxt componentsSeparatedByString:@"::"];
        [radioInputArray addObjectsFromArray:myRadios];
        NSLog(@"%d", myRadios.count);
        NSLog(@"Number of buttons in global radio array %d", radioInputArray.count);
        NSLog(@"%d", scrollViewer.subviews.count);
    }
}

所以它没有抛出任何异常并且似乎正常工作,除了addObjectsFromArray:之后,我在全局NSMutableArray中的计数为0(myRadios中的计数= 56)。我很确定他们在这一点上应该是平等的,但事实并非如此。我已将NSMutableArray声明为靠近顶部,以便可以全局访问。我错过了分配和初始化这个的东西吗?它是不是像C#那样自动执行此操作?再一次,这是我第一次从Windows编程进入Objective-C世界,所以请保持温和但随意批评。

3 个答案:

答案 0 :(得分:1)

您的两个全局数组未初始化。

static NSMutableArray *radioInputArray;
static NSMutableArray *buttonsArray;

只需将两个变量定义为NSMutableArray的指针,因此您需要让它们指向类NSMutableArray的实际实例。

在初始化代码中的某个位置,或通过访问器(最好是类方法),您应该将变量设置为空的,新分配的NSMutableArray

这是一种方法:

+ (NSMutableArray*)radioInputArray
{
    if (!radioInputArray) {
        radioInputArray = [[NSMutableArray alloc] init]; 
    }

    return radioInputArray;
}

然后在代码中使用访问器而不是全局变量。

答案 1 :(得分:0)

如果radioInputArraynil,可能会发生这种情况, 你没有初始化数组

你需要添加

[[radioInputArray alloc] init]; 
在使用radioInputArray

执行任何操作之前

答案 2 :(得分:0)

初始化对象的好地方是" init"全局类中的方法

实施例

-(id)init
{
    if (self=[super init]) {

        self.globalAllArtworkArray=[[NSMutableArray alloc] init];
        self.globalCollectionArray=[[NSMutableArray alloc] init];
        self.globalLookbookArray=[[NSMutableArray alloc] init];

    }
    return self;

}

+(ASNGlobalClass *)shareManager
{
    static ASNGlobalClass *sharedInstance = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        sharedInstance = [[self alloc] init];

    });

    return sharedInstance;
}