2012-04-24 3 views
0

최상의 방법은 응용 프로그램의 첫 번째 컨트롤러에서 개체 컨텍스트를 전달하는 것입니다. 그러나 내 앱이 내비게이션 컨트롤러로 시작하고 일부보기 컨트롤러는 콘텐츠 만 필요하며 핵심 데이터가 필요하지 않습니다. 이것이 더 간단한 해결책이라고 생각했습니다.기본 컨트롤러의 AppDelegate에서 핵심 데이터 개체 컨텍스트가있는

헤더 : 구현

#import <UIKit/UIKit.h> 
#import "AppDelegate.h" 

@interface CoreDataViewController : UIViewController 
- (void)saveContext; 

//See ggfela's answer 
//@property (readonly, strong, nonatomic) AppDelegate *appDelegate; 
//@property (readonly, strong, nonatomic) NSManagedObjectContext *managedObjectContext; 

@property (readonly, weak, nonatomic) AppDelegate *appDelegate; 
@property (readonly, weak, nonatomic) NSManagedObjectContext *managedObjectContext; 

@end 

: 아마

#import "CoreDataViewController.h" 

@implementation CoreDataViewController 

@synthesize appDelegate = _appDelegate; 
@synthesize managedObjectContext = _managedObjectContext; 

-(AppDelegate *)appDelegate 
{ 
    if(!_appDelegate) { 
     _appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate]; 
    } 

    return _appDelegate; 
} 

-(NSManagedObjectContext *)managedObjectContext 
{ 
    if(!_managedObjectContext) { 
     _managedObjectContext = self.appDelegate.managedObjectContext; 
    } 

    return _managedObjectContext; 
} 

- (void)saveContext 
{ 
    [self.appDelegate saveContext]; 
} 

@end 

나는이 클래스에서 상속 할 때 나는 내가 모여 SIGABRT 오류를 받고 있어요 관리되는 개체 컨텍스트에 액세스하려고 의미가있다 어딘가에서 메모리 누출. 나는 Objective-C에 익숙하지 않아서 디버깅에 대해 너무 많이 모른다.

누구나 내가 뭘 잘못하고 있는지 말할 수 있습니까?

다른 방법 (컨트롤러에서 하위 컨트롤러로 컨텍스트 전달)을 수행해야하고 사과가 결과적으로 내 앱을 차단할 수 있습니까?

답변

1

strong 속성은 setter에 적용되고 읽기 전용 속성을 사용하므로 사용하지 않아야합니다.

+0

좋아요. 저는 지금 강하고 약해져 있습니다. GC에 크게 의존하는 것은 C# 프로그래머에게는 새로운 것입니다. – rashleighp

+0

감사합니다. 나는 그것을 바꿨다. (그리고 위의 그것을 편집했다.) 그러나 오류는 여전히 지속된다. 앱 위임 코드와 관련이있을 수 있습니까? (이것은 Master DetailController에 컨텍스트를 제공하는 맨 위 메서드를 제외한 Master Detail 템플릿 프로젝트의 것입니다.) – rashleighp

+0

그냥 (읽기 전용, 비 원자) 약자는 세터를 지칭합니다. appDelegate 속성은 어디서나 액세스 할 수 있으므로 필요하지 않습니다. – ggfela

관련 문제