При обновлении модели из базы данных существующие объекты изменяются [дубликаты]

В OP не упоминались контроллеры представлений, но так много ответов, что я хотел подслушивать то, что некоторые из новых функций LLVM позволяют сделать это проще, когда вы хотите передавать данные с одного контроллера вида на другой, а затем получая некоторые результаты назад.

Разделительные раскладки, блоки ARC и LLVM делают это проще, чем когда-либо для меня. Некоторые ответы выше упомянутых раскадровки и segue уже, но все еще опирались на делегацию. Определение делегатов, безусловно, работает, но некоторым людям легче найти указатели или кодовые блоки.

С помощью UINavigators и segues есть простые способы передачи информации контроллеру подчиненного и возврату информации. ARC делает простые указатели на вещи, полученные из NSObjects, поэтому, если вы хотите, чтобы подчиненный контроллер добавлял / изменял / модифицировал некоторые данные для вас, передайте ему указатель на изменяемый экземпляр. Блоки упрощают прохождение, поэтому, если вы хотите, чтобы подчиненный контроллер вызывал действие на вашем контроллере более высокого уровня, передайте ему блок. Вы определяете блок, чтобы принять любое количество аргументов, которое имеет смысл для вас. Вы также можете разработать API для использования нескольких блоков, если это лучше всего подходит.

Вот два тривиальных примера клея segue. Первый - это простой показ одного параметра, переданного для ввода, второй для вывода.

// Prepare the destination view controller by passing it the input we want it to work on
// and the results we will look at when the user has navigated back to this controller's view.

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    [[segue destinationViewController]

     // This parameter gives the next controller the data it works on.
     segueHandoffWithInput:self.dataForNextController

     // This parameter allows the next controller to pass back results
     // by virtue of both controllers having a pointer to the same object.
     andResults:self.resultsFromNextController];
}

Этот второй пример показывает передачу блока обратного вызова для второго аргумента. Мне нравится использовать блоки, потому что он держит соответствующие детали близко друг к другу в источнике - источник более высокого уровня.

// Prepare the destination view controller by passing it the input we want it to work on
// and the callback when it has done its work.

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    [[segue destinationViewController]

     // This parameter gives the next controller the data it works on.
     segueHandoffWithInput:self.dataForNextController

     // This parameter allows the next controller to pass back results.
     resultsBlock:^(id results) {
         // This callback could be as involved as you like.
         // It can use Grand Central Dispatch to have work done on another thread for example.
        [self setResultsFromNextController:results];
    }];
}
2
задан BradleyDotNET 28 August 2015 в 16:12
поделиться

1 ответ

Entity Framework (Model-First) создает для вас файл кода. Любые изменения, которые вы вносите в этот файл, будут потеряны при следующем генерировании. Существует даже предупреждение об этом в комментарии в верхней части файла.

Однако эти классы отмечены partial (поскольку большинство сгенерированных классов), поэтому вы можете имеют отдельный файл кода, который содержит оставшуюся часть определения класса (т. е. ваши методы). См. MSDN для получения дополнительной информации о частичных классах .

Вы также можете записать другие классы, которые принимают объекты данных в качестве параметров. Обычно это , как вы это делаете, поскольку объекты EF обычно оставляют только данные.

8
ответ дан BradleyDotNET 24 August 2018 в 20:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: