0

私は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;
}

の NSStringsongFromNumberChooserSongController変更されていません。私は何を間違っていますか?

4

4 に答える 4

0

NSUserDefaults を使用して NSString 値を変更しました。

- (IBAction)goButton:(id)sender {
   .....
}
else
{        
    [[NSUserDefaults standardUserDefaults] setObject:songNumber forKey:@"number"];
    [[NSUserDefaults standardUserDefaults]synchronize];

そして、のviewWillAppearメソッドでそれを取得しましたSongController

- (void)viewWillAppear:(BOOL)animated
{
    songNumber = [[NSUserDefaults standardUserDefaults] objectForKey:@"number"];
}
于 2013-08-22T18:16:12.643 に答える
0

タブ間で実際にデータを渡しているようには見えません。そのための最善の方法は、委任パターンを使用することです。最初にこのチュートリアルを読んでもらいます。それでもうまくいかないことがあれば、一緒にハッキングできます。

于 2013-07-17T22:14:08.983 に答える
0

これが機能しない理由は、タブ バー コントローラーで既にインスタンス化した SongController に値を割り当てるのではなく、SongController の新しいインスタンスを作成しているためです。

代わりに、これを試して、既に作成したものを取得してください。

SongController* sing = self.tabBarController.viewControllers[1];

sing.songNumberFromChooser = songNumber;

self.tabBarController.selectedIndex = 1;
于 2013-07-17T22:14:51.597 に答える
0

の新しいインスタンスを作成してSongControllerいますが、UITabBarController によって管理されている既存のインスタンスにアクセスし、songNumberFromChooserそのコントローラーで設定する必要があります。

于 2013-07-17T22:15:25.590 に答える