0

pushviewcontrollerのようなmodalviewcontrollerにデータをプッシュしようとしています。modalviewcontrollerを呼び出すための次のコードがあります。ビューを呼び出し、データをテキストフィールドとして挿入します。文字列として保存してから、データベースに挿入してみます。データベースに保存するには、レコードを挿入するための一意のキーを送信する必要があります。

-(void) editNote{

TextViewController * vc = [(TextViewController *)[TextViewController alloc] init];
UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:vc];
[self.navigationController presentModalViewController:nav animated:YES];
[vc release];
}

保存オプションでは、次のメソッドを呼び出します。編集ボタンをクリックすると、レコードデータをプッシュして保存機能で使用できるようになります。

-(IBAction) save{

self.description = self.textFieldBeingEdited.text;
NSString *description_query = [NSString stringWithFormat:@"INSERT OR REPLACE INTO NET (ID,DESCRIPTION) VALUES ('%@','%@');",rec.id, self.description] ;
const char *sql_description = [description_query UTF8String];
sqlite3_exec(db, sql_description, NULL, NULL, NULL);
[[self parentViewController] dismissModalViewControllerAnimated:YES];   
}

誰かがそのような問題に遭遇しましたか?

4

2 に答える 2

0

問題を理解しているかどうかはわかりませんが、保存時に親コントローラーからモーダルコントローラーにデータを送信することに関係していると思いますか? 最も簡単な方法は、Objective-C プロトコルを使用して、保存ボタンが押されたことを親に通知し、そこからすべてを実行することです。

たとえば、SaveController というクラスと RootViewController があるとします。

まず、SaveControllerDelegate.h というプロトコルを作成します。

@protocol SaveControllerDelegate <NSObject>
- (void)saveWasHit:(id)sender;
@end

SaveController.h で、次の定義を追加できます。

@interface SaveController : UIViewController {
    id <SaveControllerDelegate> delegate;
}

@property (nonatomic, assign) id <SaveControllerDelegate> delegate;

@end

ここで、RootViewController.h にプロトコルをデリゲートとして追加します。

@interface RootViewController : UIViewController <SaveControllerDelegate> {
     ...
}

SaveController に戻ると、.m ファイルには、保存ボタンが押されたときに発生する IBAction があります。RootVewController (またはデリゲートが何であれ) のデリゲート メソッドをテストするように変更し、存在する場合はデリゲート メソッドを呼び出して、必要なデータを送信します。

- (IBAction)saveButtonHit:(id)sender
{
     if ([self.delegate respondsToSelector:@selector(saveWasHit:)])
          [self.delegate saveWasHit:data];
}

あとは、デリゲートに応答するように RootViewController.m を編集するだけです。

saveController = [[SaveController alloc] init];
[saveController setDelegate:self];

プロトコルを実装します。

- (void)saveWasHit:(id)sender
{
     //do whatever I need to do with the data from SaveController here.
}
于 2011-08-16T20:17:49.543 に答える
-1

View Controller から次の View Controller に情報を送信する最良の方法は、作成時に行うことです。editNoteおそらく、メソッドを次のように変更できます。

-(void)editNote:(Note*)note {
    TextViewController * vc = [[TextViewController alloc] initWithNote:note];
    UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:vc];
    [self.navigationController presentModalViewController:nav animated:YES];
    [vc release];
}

そして、保存方法を次のようにします。

-(IBAction) save{
    self.description = self.textFieldBeingEdited.text;
    NSString *description_query = [NSString stringWithFormat:@"INSERT OR REPLACE INTO NET (ID,DESCRIPTION) VALUES ('%@','%@');", self.note.id, self.description] ;
    const char *sql_description = [description_query UTF8String];
    sqlite3_exec(db, sql_description, NULL, NULL, NULL);
    [self dismissModalViewControllerAnimated:YES];   
}

[self parentViewController]に変更を削除したことに注意してくださいself。これはよくある間違いで、iOS 5 では期待どおりに動作しなくなりました。

于 2011-08-16T17:16:21.743 に答える