1

読んだ結果、このようなことができるように、ViewControllerを参照する変数をAppDelegateに設定する必要があることを学びました。バーコードスキャンを受信し、続いてコントローラーのメソッドを呼び出して、そのバーコードスキャンを渡します。だから私は私のAppDelegateにこれを持っています。

- (void)BarcodeDataArrived:(char *)BarcodeData;
{
[myViewController LoadBarcodePage:BarcodeData];
}

Bluetoothスキャナーがバーコードをスキャンするときにこのメソッドが呼び出されていることを知っています。問題は、myViewControllerオブジェクトが現在のView Controllerを参照しておらず、その結果、すべてのオブジェクトがnullになることです。

アプリの読み込み時にストーリーボードがすでにインスタンスを作成しているため、myViewControllerの新しいインスタンスを作成する必要はないと思います。ストーリーボードが作成しているのと同じオブジェクトを参照できるようにしたいだけです。したがって、物事を正しく理解している場合は、AppDelegateで次のようなことを行って変数を設定する必要があります。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:  (NSDictionary *)launchOptions
{

    // I Want To Set A Reference To My View Controller Here Such As...   

    myViewController = aViewController;

    // Where aViewController Is What The Storyboard Initialized.

    return YES;
}

どうすればいいですか。NETで見つけたすべての参照には、ストーリーボードではなくペン先が含まれているようです。

これは私の最初のアプリです。助けてください!

4

1 に答える 1

0

App Delegate でそれを実装しないでください。BarcodeDataArrived を ViewController に実装してみませんか?

- (void)BarcodeDataArrived:(char *)BarcodeData {
   [self performSegueWithIdentifier:@"toMyViewControllerSegue" 
                             sender:self];

    }

次に、prepareForSegueMethod でデータを送信先 Controller に送信できます。

 -(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
 myViewController *destinationController= (myViewController * )segue.destinationViewController;

    destinationController.BarcodeData=BarcodeData;

  }

ビューを変更したくない場合は、別のアプローチを試す必要があります。myViewController はオブジェクト (またはクラス) であり、そこにメソッド LoadBarcodePage を実装する必要があります。デリゲートにオブジェクトを含めることができ、それを使用して任意のクラスで参照できます

 AppDelegate *delegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
 [delegate.myVar doWhatever you want];
于 2012-04-26T23:10:43.773 に答える