2014-02-18 3 views
2

Почему ClassA NSMutableArray arl count по-прежнему 0?ios method param присваивать глобальную переменную

Есть ли способ обойти это?

Класс B

B.h 

#import <Foundation/Foundation.h> 
#import"A.h" 

@interface B :NSObject 
-(void) doSomeThing; 

B.m

@implementation B 

-(void)doSomeThing{ 
     NSMutableArray *Array = [[NSMutableArray alloc] initWithObject:@"1",@"2",@"3",@"4",nil]; 
     A *a = [[A alloc] init]; 
    [a getValue:Array]; 
} 

Класс A

хиджры

#import <UKit/UKit.h> 
@class B; 
@interface A :UIViewController; 

@property (strong,nonatomic) NSMutableArray *arl; 

-(void) getValue:(NSMutableArray *)Array; 

-(IBAction)button:(id)sender; 

@end 

a.m

@implementation A 
@synthesize arl; 

-(void) viewDidLoad { 
    [super viewDidLoad]; 
    B *b = [[B alloc] init]; 
    [b doSomeThing]; 
} 

-(void) getValue:(NSMutableArray *) Array { 

    arl = Array; 
    // arl = [[NSMutableArray alloc]initWithArray:Array]; 
    // [arl addObjectFromArray:Array]; 
    NSLog(@"arl count is :%d",[arl count]); // the log at here is 4 
} 

-(IBAction) button : (id)sender{ 
    NSLog(@"arl count is :%d",[arl count]);// the log at here is 0 
} 

ответ

1

Вы делаете новый экземпляр A в doSomething. Этот экземпляр не совпадает с экземпляром, который связан с вашим методом button:, чья arl по-прежнему неинициализирована и поэтому не имеет элементов в нем, следовательно, подсчет нуля при вызове button.

0

Вы создаете объект first.When в viewDidLoad, вы создаете B object.But, когда объект B вызов метода DoSomething, вы снова создать другой новый Объект, не равен предыдущему объект. И ваша кнопка принадлежит первому объекту A, изменяемый массив принадлежит второму объекту A. Немного сложно, надеюсь, вы поймете.

Смежные вопросы