IOS: Плохой доступ при попытке добавить новый объект Entity - PullRequest
1 голос
/ 26 декабря 2010

Так что я использую coredata для моделирования моих отношений.

Вкратце это модель

Тип A может иметь один или несколько типов типа B

Тип B имеет обратную зависимость, связанную с типом A

Тип B может иметь один или несколько типов типа C Тип C имеет обратную зависимость от связи с одним из типов B

С точки зрения пользовательского интерфейса, у меня есть контроллер навигации с контроллерами, которые последовательноустанавливает первый объект A (VC-1), затем другой viewcontroller (VC-2) создает объект B (я передаю объект A этому контроллеру), и объект B добавляется к объекту A.Точно так же происходит и с B и C.Третий Viewcontroller (VC3) сначала создает объект C и назначает его переданному объекту B.

Также между этими контроллерами представления также передается управляемый объект ObjectOntext.

Так что мой вариант использования таков, что, хотя viewcontroller (VC-3) является верхним контроллером, действие кнопки будет продолжать создавать несколько объектов типа C и добавлять их к тому же объекту типа B, который был передан.Также как часть этой функции я сохраняю контекст managedObject после сохранения каждого типа C.

например, код в viewcontroller 3

- (void) SaveNewTypeC
{
    TypeC *newtypeC =  (Question*)[NSEntityDescription insertNewObjectForEntityForName:@"TypeC" inManagedObjectContext:managedObjectContext];

    [newtypeC setProp1:] ;
        [newtypeC setProp2:] 

         ..
         .. 

    // setting up the inverse relationship here . 
    [newtypeC setBTypeObject: typeBObject];
    // adding another typeC object to the single typeB object we own here 
    [typeBObject addTypeCInTypeBObject:newtypeC];


    [section setTotalCObjectCount:[ NSNumber numberWithInt:typeCIndex++]];


    NSError *error = nil;
    if (![managedObjectContext save:&error]) {
        // Handle error
        NSLog(@"Unresolved error %@, %@, %@", error, [error userInfo],[error localizedDescription]);
        abort();  // Fail
    }

    [newtypeC release];



}

- (IBAction)selectedNewButton:(id)sender {


    [self SaveNewTypeC];

    [self startRepeatingTimer];

}

ПЛОХОЙ ДОСТУП, кажется, появляется выше, где

// setting up the inverse relationship here . 
        [newtypeC setBTypeObject: typeBObject];
        // adding another typeC object to the single typeB object we own here 
        [typeBObject addTypeCInTypeBObject:newtypeC];

Любые подсказки по разрешению этой проблемы будут полезны.

1 Ответ

1 голос
/ 27 декабря 2010

[выпуск newtypeC]; является причиной плохого доступа. почему вы выпускаете объект newtypeC. Вы не использовали alloc, new, save или copy для создания этого объекта.

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