Как мы можем передать данные в modalviewcontroller аналогично pushviewcontroller - PullRequest
0 голосов
/ 16 августа 2011

Я пытаюсь отправить данные в 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];   
}

Кто-нибудь сталкивался с такими проблемами?

Ответы [ 2 ]

0 голосов
/ 17 августа 2011

Не уверен, что понимаю проблему, но я понимаю, что это связано с отправкой данных с родительского контроллера на модальный при сохранении времени? Самый простой способ - использовать протокол 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.
}
0 голосов
/ 16 августа 2011

Лучший способ отправить информацию от контроллера представления к следующему - это сделать это при создании.Возможно, вы можете изменить метод 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...