我在这里遇到有关NSDictionary数据丢失的问题(或者我试图在视图控制器之间传递的任何数据类型)。我正在传递数据,因为我将在下面的代码中显示。但是在传递然后再次访问数据之后,我收到了一个null
对象。
FirstViewController.m
-(void)showSecondViewController{
SecondViewController *secondVC = [SecondViewController new];
NSMutableDictionary *passedData = [[NSMutableDictionary alloc]init];
[passedData setObject:@"First Object" forKey:@"first_obj"];
[passedData setObject:@"Second Object" forKey:@"second_obj"];
[secondVC setData:passedData];
[self performSegueWithIdentifier:@"SecondViewControllerSegue" sender:self];
}
在我的SecondViewController.h
@interface SecondViewController : UIViewController
{
NSDictionary *passedDataContainer;
}
-(void)setData(NSDictionary *)data;
并SecondViewController.m
-(void)setData(NSDictionary *)data{
passedDataContainer = data;
}
由此我假设我的NSDictionary
来自我的FirstViewController
,但是当我使用它时,例如说...
-(void)usePassedData{
NSLog(@"Display Passed Data from FirstViewController: %@",passedDataContainer);
}
在此代码段中,输出将为
Display Passed Data from FirstViewController: (null)
我希望我已经很好地解释了这个案子。我已经检查了一些可能的修复,我在这里找到了SO,例如,这篇文章---> iOS NSDictionary pass through function。如果我知道这是什么原因我会很高兴,我是Objective-C的新手。
P.S。我正在使用ARC。
感谢。
答案 0 :(得分:0)
如果你想将数据从secondviewcontroller传递给第一个视图控制器,那么你可以使用CUSTOM DELEGATE,使用custome委托你可以将数据从secondviewcintroller传递给firstviewcontroller。
答案 1 :(得分:0)
有很多方法可以实现您的解决方案。
- NSUserDefaults的。
- 代表(自定义)。
醇>
对于您的问题:。 Use the @PRoperty (Strong) reference to the NSDictionary and refer it from FirstViewController with the proper alloc of instance of SecondViewController.
答案 2 :(得分:0)
尝试这样,希望这有助于你:)
你SecondViewController.h
中的
@interface SecondViewController : UIViewController
{
NSDictionary *passedDataContainer;
}
@property (nonatomic, retain) NSDictionary *data;
并在SecondViewController.m
@synthesize data; //just synthesize it
和您的FirstViewController.m
-(void)showSecondViewController{
SecondViewController *secondVC = [SecondViewController new];
NSMutableDictionary *passedData = [[NSMutableDictionary alloc]init];
[passedData setObject:@"First Object" forKey:@"first_obj"];
[passedData setObject:@"Second Object" forKey:@"second_obj"];
secondVC.data = passedData; //[secondVC setData:passedData];//change this
[self performSegueWithIdentifier:@"SecondViewControllerSegue" sender:self];
}
答案 3 :(得分:0)
表示您的解释,您正在使用storyboard segue
从FirstViewController
转换为SecondViewController
。您需要使用prepareForSegue
方法而不是showSecondViewController
方法传递数据。
试试这个
FirstViewController.m
-(void)showSecondViewController{
[self performSegueWithIdentifier:@"SecondViewControllerSegue" sender:self];
}
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString:@"SecondViewControllerSegue"]){
NSMutableDictionary *passedData = [[NSMutableDictionary alloc]init];
[passedData setObject:@"First Object" forKey:@"first_obj"];
[passedData setObject:@"Second Object" forKey:@"second_obj"];
SecondViewController *secondVC = (SecondViewController *)segue.destinationViewController;
[secondVC setData:passedData];
}
在SecondViewController.h
@property(strong, nonatomic) NSDictionary *data;
在SecondViewController.m
-(void)usePassedData{
NSLog(@"Display Passed Data from FirstViewController: %@",data);
}