2015-01-02 2 views
0

У меня есть push-сегмент, который я использую для передачи данных из ячейки uitableview в текстовые поля. План приложения состоит в том, что пользователь вводит данные в текстовое поле, затем они нажимают на кнопку, и они будут модально переходить к контроллеру табличного представления, затем они выберут uitableviewcell и будут перенесены обратно в исходное представление где они ввели данные в текстовое поле, и содержимое tableviewcell будет введено в разные текстовые поля на одном и том же представлении. Но я испытываю проблемы, когда данные стираются из исходного текстового поля и создается другое представление.Нажатие данных через UITableViewcell с развязкой segues

Итак, теперь я попытался использовать разматывающий сегмент, так что теперь данные, введенные ранее, отображаются, но ячейка представления таблицы не заполняется, как раньше.

Вот код, чтобы подтолкнуть данные -

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 
    if ([segue.identifier isEqualToString:@"showRecipeDetail"]) { 
     NSIndexPath *indexPath = nil; 
     Recipe *recipe = nil; 
     if (self.searchDisplayController.active) { 
      indexPath = [self.searchDisplayController.searchResultsTableView indexPathForSelectedRow]; 
      recipe = [searchResults objectAtIndex:indexPath.row]; 
     } else { 
      indexPath = [self.tableView indexPathForSelectedRow]; 
      recipe = [recipes objectAtIndex:indexPath.row]; 
     } 


PersonDetailTVC *destViewController = segue.destinationViewController; 
     destViewController.recipe = recipe; 

     [self dismissViewControllerAnimated:YES completion:nil]; 
    } 
} 

Вот код для размотки Segue -

- (IBAction)unwindFromDetailViewController:(UIStoryboardSegue *)segue 
{ 
    // ViewController *detailViewController = [segue sourceViewController]; 
    NSLog(@"%@", segue.identifier); 
} 
+1

Вместо того чтобы создавать зависимости между контроллерами и пытаться передать данные между ними, подумайте над созданием отдельного объекта, который представляет модель данных вашего приложения. Когда контроллер хочет что-то изменить, обновите модель. Когда диспетчеру нужно что-то отобразить, спросите модель о ее текущем значении. –

+0

хорошо бы вы знали, как я мог начать? –

ответ

0

Expanded от комментариев, как начать работу с объектом модели данных:

AppDataModel.h

#import <Foundation/Foundation.h> 

@class Recipe; 

@interface AppDataModel : NSObject 

+ (instancetype)sharedData; 

- (void)selectRecipeAt:(NSUInteger)index; 

@property (nonatomic, strong, readonly) Recipe *selectedRecipe; 

@end 

AppDataModel.m

#import "AppDataModel.h" 

@interface AppDataModel() 

@property (nonatomic, strong) NSArray *recipes; 
@property (nonatomic, strong, readwrite) Recipe *selectedRecipe; 

@end 

@implementation AppDataModel 

+ (instancetype)sharedData { 
    static AppDataModel *dataModel = nil; 
    static dispatch_once_t onceToken; 
    dispatch_once(&onceToken, ^{ 
     dataModel = [[AppDataModel alloc] init]; 
    }); 
    return dataModel; 
} 

- (void)selectRecipeAt:(NSUInteger)index { 
    self.selectedRecipe = [self.recipes objectAtIndex:index]; 
} 

@end 

Использование:

[[AppDataModel sharedData] selectRecipeAt:0]; 
Recipe *toDisplay = [[AppDataModel sharedData] selectedRecipe]; 

Это предполагает, что у вас есть код в модели данных, чтобы настроить массив рецептов.

+0

ладно спасибо, даст ему шанс. –

+0

Он просит меня добавить «[» и элемент initializer не является постоянной времени компиляции –

+0

Какая строка дает вам ошибку? –

Смежные вопросы