2012-02-20 9 views
8

私はUIViewControllerから私のUITableViewControllerに切り替えようとしていますが、apperendlyそれは私が望むように動作していません。 私は最初からストーリーボードを使用してインターフェースを作成しました。そのため、実際にはコードによって1つのビューから別のビューに移動するわけではありません。今までは、ストーリーボードで簡単に実装できるビューグループごとにビューをプッシュしました。しかし、以前のビューに戻ってみると、新しいViewControllerが実装されるため、古いものに保存されたすべてのデータが失われてしまいます。 >私は自分のUITableViewにMutableArray保存するものだ -コントローラーから前のコントローラーに戻る

は実際に私が(理由serguesの)を提示でしたが、状況は何のコードはありません。

- >ユーザーがスキャンボタンをタップし、配列にインポートする新しい項目をスキャンします。

- >私のテーブルビューにプッシュしようとすると、古いコントローラに保存されていたデータに気付いていない新しいコントローラがあります。

それでは、以前のコントローラに戻って、新しいコントローラを作成しないようにするにはどうしたらいいですか?

sergue-pushは常に新しいコントローラを作成しますか?

(質問は簡単かもしれないが、私はこのようなものに新たなんだ検索機能によって提示されたいくつかの結果を試してみましたが、それらのどれもが:(働いていない。)

/編集:Popbackの問題は解決したが、配列されています充填の問題がまだ存在しているコード:。。

GeneralSettings *sharedGS = [GeneralSettings sharedInstance]; 
sharedGS.strEAN = [[NSString alloc] initWithString:strCheckString]; 
[sharedGS.listArray insertObject:strCheckString atIndex:0]; 
NSLog(@"Anzahl der EAN-Codes: %d\nErster Code: %@\n In Variable: %@", sharedGS.listArray.count, [sharedGS.listArray objectAtIndex:0],sharedGS.strEAN); 

sharedGS.strEANのデータ(「83274572354」すなわち)listArray(ヌル)

答えて

20

で データあなたがプッシュバックしませんが、それはの新しいインスタンスを作成します前のコントローラクラス。ポップバック。あなたはその2つの方法を達成することができます。

1:あなたがタブレットビューコントローラーに戻る(ポップする)ときに、次のステートメントでコード内に挿入します。

[self.navigationController popViewControllerAnimated:YES];

2:あなたは次のカスタムセグエクラスを実装する必要がストーリーボードにそれをしたい場合:

実装

// PopSegue.m 

#import "PopSegue.h" 

@implementation PopSegue 

- (void) perform { 

    UIViewController *src = (UIViewController *) self.sourceViewController; 
[src.navigationController popViewControllerAnimated:YES]; 
} 

とヘッダ

// PopSegue.h 

#import <UIKit/UIKit.h> 

@interface PopSegue : UIStoryboardSegue 

@end 

このメソッドをUIViewControllerに配置して、prを設定しますあなたのUITableViewControllerに戻ります:

+0

ありがとう!戻っ単一POPの新しいクラスを作成するために、少し大きめになるので、私は最初のものを使用しています。しかし、私のアレイが依然としてとして働いていません意図しています...私は私の変数を調べて、データがそこにあります(例えば "432436274")が、addObjectまたはinsertObject:atIndex cmdで配列に追加しようとすると、起こっていること。あなたも私を助けてくれますか? – blaluma

+0

コードは次のようになります。 'GeneralSettings * sharedGS = [GeneralSettings sharedInstance]; sharedGS.strEAN = [[NSString alloc] initWithString:strCheckString]; [sharedGS.listArray insertObject:strCheckString atIndex:0]; NSLog(@ "エラーコード:%d \ nErsterコード:%@ \ n変数:%@"、sharedGS.listArray.count、[sharedGS.listArray objectAtIndex:0]、sharedGS.strEAN); ' コードの書式設定が機能しない、または間違っていますか? 'MyCode'? – blaluma

+0

デリゲートとデリゲートプロトコルをセットアップできますが、より簡単な方法は2番目のオプションを使用することです。 2番目の方法はかなり簡単です - 私のコードを新しいobjective-cクラスにコピーするだけです。その後、UIViewControllerでprepareForSegueメソッドを実装し、宛先ビューコントローラ(あなたのUITableViewController)にプロパティを設定します。私は上記の答えでmayのprepareForSegueメソッドを投稿します。 –

3

@TJ この方法 「2:あなたはストーリーボードにそれをしたい場合は、次のカスタムセグエクラスを実装する必要があります。

実装」を採用

と、次のthe documentによると、 は、「設定をセグエは のiOSをトリガーされるデスティネーション・コントローラーは、セグエがトリガされたときに、次のタスクを実行します。

それは先のビューコントローラのインスタンスを生成 それがトリガーされるセグエのすべての情報を保持している新しいセグエオブジェクトをインスタンス化。注:ポップオーバーセグは、宛先ビューコントローラを制御するために使用されるポップオーバーコントローラを識別するプロパティも提供します。 ソースビューコントローラのprepareForSegue:sender:メソッドを呼び出し、新しいsegueオブジェクトとsegueをトリガしたオブジェクトを渡します。 segueのperformメソッドを呼び出して、宛先コントローラを画面に表示します。実際の動作は、実行されるセグエの種類によって異なります。たとえば、モーダルセグはソースビューコントローラに、デスティネーションビューコントローラを表示するように指示します。 segueオブジェクトが解放され、segueが完了しました。 "

もう一度、提示されたviewControllerをインスタンス化し、次に" perform "というオーバーライドメソッドの後にdeallocを実行します。 the documentに従ってデリゲートmethodof。

おかげ

関連する問題