0

我正在尝试将数据推送到 modalviewcontroller,如 pushviewcontroller。我有以下代码来调用 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

将信息从视图控制器发送到下一个的最佳方式是在创建时进行。也许您可以将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 回答