我对iOS开发很陌生。
我在标签栏控制器中的视图之间传递数据时遇到问题。
ViewController // First tab in the tab bar with a number pad for entering numbers into a label
SongController // Second tab embed within a Navigation Controller searches database for number entered in the first tab and displays lyrics in a web view
我试图将ViewController中标签的值传递给SongController中的方法。
在ViewController.m
- (IBAction)goButton:(id)sender {
int songNum = [self.numberLabel.text intValue];
NSString *songNumber = [NSString stringWithFormat:@"%d",songNum];
if ([songNumber isEqual: @"0"] || [songNumber isEqual: @""]) {
[self.numberLabel setText:@""];
UIAlertView *songNotFound = [[UIAlertView alloc]
initWithTitle: @"Sorry"
message: @"This song could not be found."
delegate: nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[songNotFound show];
}
else
{
NSLog(@"%@", songNumber);
SongController *sing = [[SongController alloc]init];
sing.songNumberFromChooser = songNumber;
self.tabBarController.selectedIndex = 1;
}
songFromNumberChooser
中的NSString SongController
未被更改。我做错了什么?
答案 0 :(得分:0)
看起来你实际上并没有在标签之间传递数据。最好的方法是使用委托模式。我先让你先阅读this tutorial。如果有些东西仍然不起作用,我们可以一起破解它。
答案 1 :(得分:0)
这不起作用的原因是因为您正在创建SongController的新实例,而不是将值分配给已在标签栏控制器中实例化的SongController。
而是尝试这个来获得你已经创建的那个:
SongController* sing = self.tabBarController.viewControllers[1];
sing.songNumberFromChooser = songNumber;
self.tabBarController.selectedIndex = 1;
答案 2 :(得分:0)
您正在创建SongController
的新实例,而您应该做的是访问由UITabBarController管理的现有实例,并在该控制器上设置songNumberFromChooser
。
答案 3 :(得分:0)
我使用NSUserDefaults更改了NSString值。
- (IBAction)goButton:(id)sender {
.....
}
else
{
[[NSUserDefaults standardUserDefaults] setObject:songNumber forKey:@"number"];
[[NSUserDefaults standardUserDefaults]synchronize];
然后在SongController
- (void)viewWillAppear:(BOOL)animated
{
songNumber = [[NSUserDefaults standardUserDefaults] objectForKey:@"number"];
}