3

iOSアプリを実行しようとしていますが、クラス間でデータを渡すことに行き詰まっています。これは私の 2 番目のアプリです。最初のものはグローバル クラスで行われましたが、今は複数のクラスが必要です。多くのチュートリアルを試しましたが、うまくいかなかったか、渡された値が常にゼロでした。IOS 5 での変数の受け渡しを示す簡単なアプリを書いてください。特別なものはなく、2 つのビュー コントローラーと 1 つの変数を備えたストーリーボード。

ご協力ありがとうございました 。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    // Navigation logic may go here. Create and push another view controller.

            FirstViewController *fv;
            fv.value = indexPath.row;

            NSLog(@"The current %d", fv.value);

            FirstViewController *detail =[self.storyboard instantiateViewControllerWithIdentifier:@"Detail"];
            [self.navigationController pushViewController:detail animated:YES]; 

}

これが私のメイン ビューのコードです。次のビューに押した indexPath.row またはセルのインデックスを送信する必要があります。

4

3 に答える 3

12

やるべきことがいくつかあります。アプリによっては、変数を AppDelegate クラスに追加して、共有インスタンスを介してすべてのクラスで使用できるようにすることもできます。最も一般的なこと (と思います) は、シングルトンを作成することです。それを機能させるには、StoreVars などのクラスと、オブジェクトを返す静的メソッドを作成して、クラスを「グローバル」にすることができます。メソッド内で、いつものようにすべての変数を初期化します。そうすれば、いつでもどこからでもアクセスできます。

@interface StoreVars : NSObject

@property (nonatomic) NSArray * mySharedArray;
+ (StoreVars*) sharedInstance;

@implementation StoreVars
@synthesize mySharedArray;

+ (StoreVars*) sharedInstance {
    static StoreVars *myInstance = nil;
    if (myInstance == nil) {
        myInstance = [[[self class] alloc] init];
        myInstance.mySharedArray = [NSArray arrayWithObject:@"Test"];
    }
    return myInstance;
}

これでシングルトンになります。2 つの viewController に「StoreVars.h」をインポートすることを忘れない場合は、次のように共有配列にアクセスできます。

[StoreVars sharedInstance].mySharedArray;
               ^

StoreVars オブジェクトを返すメソッドです。StoreVars クラス内で、任意のオブジェクトを実装し、静的メソッドで初期化できます。常に初期化することを忘れないでください。そうしないと、すべてのオブジェクトが 0/nil になります。

UINavigationController のファンではなく、むしろセグエを使用したい場合は、はるかに簡単ですが、アプリがかなり「乱雑」になる可能性があります。オーバーロードする必要がある UIViewController に実装されたメソッドがあります。

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    // Make sure your segue name in storyboard is the same as this line
    if ([[segue identifier] isEqualToString:@"YOUR_SEGUE_NAME_HERE"])
    {
        // Get reference to the destination view controller
        YourViewController *vc = [segue destinationViewController];

        // Pass any objects to the view controller here, like...
        [vc setMyObjectHere:object];
    }
}

ソース: prepareForSegue: オブジェクトを渡す方法

このような質問をする前に、いくつかの調査を行ってください。いくつかのチュートリアルを読み、自分で試してから、本当に探しているものに関連する質問をしてください。人々があなたのためにすべての仕事をしたいと思うのは日常的ではありませんが、時にはあなたは幸運です. 今日のような。

乾杯。

于 2012-05-18T08:57:55.480 に答える
1

2つのコントローラー間でセグエを使用する場合は、prepareToSegueメソッドをオーバーロードする必要があります

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
// check if it's the good segue with the identifier
if([[segue identifier] isEqualToString:@"blablabla"])
{
    // permit you to get the destination segue
    [segue destinationViewController];
    // then you can set what you want in your destination controller
}
}
于 2012-05-18T08:53:59.373 に答える
1

あなたが直面している問題は、初心者にとって非常に困惑しています。間違った方法で「解決」すると、多くの悪い習慣を学ぶことになります。View Controller 間でのデータの受け渡しに関するOle Begemannの優れたチュートリアルを
ご覧ください。一読の価値があります。

于 2012-05-18T09:30:09.580 に答える