嗨,这是我的第一个问题
查看我的代码。我不明白为什么我的数组在更改视图后变为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"]];
}
答案 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
}