Лучший способ выбрать ячейку для добавления в другое представление таблицы

#iphone #objective-c #cocoa-touch #uitableview

#iPhone #objective-c #cocoa-touch #uitableview

Вопрос:

У меня есть 2 представления с таблицами. Нажатие кнопки на одной из них открывает другую таблицу в новом представлении, и вы выбираете ячейку, после чего она должна отклонить это представление и добавить данные в ячейку в исходном представлении.

Я полностью настроил 2-й вид таблицы. Я должен сделать так, чтобы при выборе ячейки она добавлялась в избранное. Или, может быть, даже выбрать несколько ячеек, затем нажать кнопку готово, затем она добавляется в избранное. Есть идеи о том, как это сделать? Спасибо.

Редактировать:

Метод addEvent просто для справки:

 -(void)addEvent
{    
    Routine *routine = (Routine *)[NSEntityDescription insertNewObjectForEntityForName:@"Routine" inManagedObjectContext:managedObjectContext];

    routine.name=entered;

    NSError *error = nil;
    if (![managedObjectContext save:amp;error]) 
    {
        // Handle the error.
    }
    NSLog(@"%@", error);

    //[eventsArray addObject:routine];

    NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0];

    NSInteger lastSection = [self.routineTableView numberOfSections] -1;


    [self.routineTableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:[self.routineTableView numberOfRowsInSection:lastSection]-1 inSection:lastSection] atScrollPosition:UITableViewScrollPositionBottom animated:YES];
}
  

РЕДАКТИРОВАТЬ 2

Этот метод используется в view1, но должен отображаться в view2, а данные выбираются из представления 4.

 -(void)addExercise
{    
    Exercise *exercise = (Exercise *)[NSEntityDescription insertNewObjectForEntityForName:@"Exercise" inManagedObjectContext:managedObjectContext];

    exercise.name=entered;

    NSError *error = nil;
    if (![managedObjectContext save:amp;error]) 
    {
        // Handle the error.
    }
    NSLog(@"%@", error);

    NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0];

    NSInteger lastSection = [self.routineTableView numberOfSections] -1;

    [self.routineTableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:[self.routineTableView numberOfRowsInSection:lastSection]-1 inSection:lastSection] atScrollPosition:UITableViewScrollPositionBottom animated:YES];
}
  

РЕДАКТИРОВАТЬ 3:

 -(void)addExercise
{    
    if (managedObjectContext == nil) 
    { 
        managedObjectContext = [(CurlAppDelegate *)[[UIApplication sharedApplication] delegate] managedObjectContext]; 
    }

    NSFetchRequest *request = [[NSFetchRequest alloc] init];
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"Exercise" inManagedObjectContext:managedObjectContext];
    [request setEntity:entity];

    NSError *error = nil;
    NSMutableArray *mutableFetchResults = [[managedObjectContext executeFetchRequest:request error:amp;error] mutableCopy];
    if (mutableFetchResults == nil) {
        // Handle the error.
    }
    [mutableFetchResults release];
    [request release];

    Exercise *exercise = (Exercise *)[NSEntityDescription insertNewObjectForEntityForName:@"Exercise" inManagedObjectContext:managedObjectContext];

    exercise.name=@"Test";

    if (![managedObjectContext save:amp;error]) 
    {
        // Handle the error.
    }
    NSLog(@"%@", error);

    NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0];

    NSInteger lastSection = [self.tableView numberOfSections] -1;

    [self.tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:[self.tableView numberOfRowsInSection:lastSection]-1 inSection:lastSection] atScrollPosition:UITableViewScrollPositionBottom animated:YES];
    [tableView reloadData];
    [self viewDidLoad];
}
  

Ответ №1:

В didSelect методе 2nd tableView вам нужно будет обновить datasource первую таблицу, а затем либо вызвать reload при нажатии кнопки done, либо использовать insertRowsAtIndex метод.

Спасибо,

Комментарии:

1. Спасибо, Равин, это имеет смысл. Каков наилучший способ обновить источник данных первой таблицы? Первая таблица загружается с помощью fetchresultscontroller.

2. Это будет зависеть от того, как появляется ваше 2-е представление и какой у него ViewController (в этом случае вы можете использовать делегирование), чтобы сообщить другому контроллеру об обновлении или иметь одну ссылку на 1-й контроллер во втором, чтобы вы могли получить доступ к методу first. добавьте несколько методов для обновления данных. Еще одна вещь, которая возможна, заключается в том, что, поскольку вы используете fetchResultsController, поэтому просто обновите свои основные данные выбранными данными в контроллере two (используя метод insert для coredata, как вы делаете), изменения могут произойти после вызова reload table.

3. Второй вид помещается в стек навигации и является отдельным классом. Я думаю, мне нужно будет пойти по маршруту core data, чтобы сделать это.

4. да, поскольку вы используете fetchresultscontroller, это будет правильный подход.

5. Спасибо Равин. Как вы думаете, вы могли бы помочь с тем, как добавить выбранную ячейку в основную модель данных? Я опубликовал метод addEvent, который я использовал в другом представлении, просто для начала.