更改视图后,数组变为空

时间:2014-05-22 22:34:48

标签: ios nsmutablearray

嗨,这是我的第一个问题

查看我的代码。我不明白为什么我的数组在更改视图后变为null 的firstView: 我尝试使用代表,但它没有工作。我的代表从不打电话。

H:

@interface CaisseViewController : UIViewController <testDelegate>
@property (nonatomic, retain) NSMutableArray *testArray;
-(void)autrePaiementChoisie:(AutrePaiementCaisseTableViewController*)controller selectPaiement:(NSString *)paiement;
@end

米:

@synthesize testArray;
- (void)viewDidLoad
{
 testArray = [[NSMutableArray alloc]initWithObjects:@"TEST 1",@"TEST 2", nil];
}

- (IBAction)autre:(id)sender {

     NSLog(@"testArray %@",testArray); // OK !
        [self performSegueWithIdentifier:@"autre" sender:self];
}


  -(void)autrePaiementChoisie:(AutrePaiementCaisseTableViewController*)controller selectPaiement:(NSString *)paiement  {

        [controller dismissViewControllerAnimated:YES completion:nil];

          NSLog(@"TEST ARRAY %@",testArray); // Is NULL

    }
//function of my delegate

-(void)sendString:(NSString *)aString  {

    NSLog(@"string %@",aString); //dont work ! never called
}

SecondView:声明委托 H:

@protocol testDelegate <NSObject>

-(void)sendString:(NSString*)aString;

@end

@property (nonatomic,assign) id<testDelegate>delegate;

米:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
       NSDictionary *paiement = [self.paiementArray objectAtIndex:indexPath.row];

   [self.delegate sendString:[paiement valueForKey:@"nom"]]; //talk with my delegate



     // CaisseViewController *caisseView  = [[CaisseViewController alloc]init];


     //[caisseView  autrePaiementChoisie:self selectPaiement:[paiement valueForKey:@"nom"]];


}

3 个答案:

答案 0 :(得分:2)

testArray为nil的原因是在第二个视图控制器中你在didSelectRowAtIndexPath中创建了第二个CaisseViewController实例,它没有执行viewDidLoad(即使它确实你有一个testArray的单独副本)。 p>

作为加载和移动到第二个视图控制器的一部分,您应该将第一个视图控制器的实例传递给它(将其保存为像委托一样的弱指针)。您可以在第二个视图控制器的didSelectRowAtIndexPath中使用该实例来回调第一个实例。

答案 1 :(得分:0)

您的代码应该为此行引发错误。

testArray = [[NSMutableArray ...

您尚未在此方法中定义testArray并为其分配内容。尝试将testArray更改为self。所有代码中的testArray。

答案 2 :(得分:0)

这里:

CaisseViewController *caisseView  = [[CaisseViewController alloc]init];
[caisseView  autrePaiementChoisie:self selectPaiement:[paiement valueForKey:@"nom"]];

您实例化了一个CaisseViewController并在viewdidload之前调用了它的方法(autrePaiementChoisie:selectPaiement :)。您的testArray在打印时未实例化。也许你应该为testArray使用'lazy loading',而不是在viewDidLoad中初始化它。

以下是它的工作原理,将此代码放在firstVC.m中:

-(NSMutableArray *) testArray
{
    if (!_testArray) {
        _testArray = [[NSMutableArray alloc]initWithObjects:@"TEST 1",@"TEST 2", nil];
    }
    return _testArray
}