Integrating Core Data with iOS(Integrating Core Data at iOS Startup)

2936 단어
한 응용 프로그램의 생명주기가 시작되는 곳은 iOS와 맥OS에서 미묘하게 다르다
맥OS의 응용이 유난히 긴 시간 동안 launch를 내놓았을 때 응답이 없는 상태가 되면 운영체제는 커서 표시 상태를 바꾼다.그리고 사용자는 프로그램이 시작되거나 종료될 때까지 기다릴 수 있습니다.
iOS에서는 이러한 개념이 없습니다.프로그램이 제한된 시간 안에 시작되지 않으면 운영체제가 자동으로 프로그램을 종료합니다.따라서 프로그램이 빨리 시작되는 것이 중요하다.
다른 한편, 응용 프로그램이 가능한 한 블록으로 코어 데이터에서 데이터를 저장하기를 원한다. 이것은 코어 데이터를 초기화하는 것은 응용 프로그램의 생명 주기의 첫 번째 단계에 두어야 한다는 것을 의미한다.비록 비전형이지만 코어 데이터는 가끔 초기화를 완성하는 데 더 많은 시간이 걸린다.
따라서 시스템이 종료되지 않도록 한 애플리케이션의 시작 순서를 두 단계로 나눌 수 있습니다.
  • 애플리케이션이 최소 로드 (application is launching)를 시작하고 있음을 사용자에게 알립니다.
  • Core Data 초기화가 완료되면 애플리케이션이 UI 로드를 완료합니다.

  • iOS에서 Core Data(Initializing Core Data in iOS) 초기화
    첫 번째는didFinishLaunchingWithOptions:어떻게 실현하는 방법을 바꾸는 것이다.응용 프로그램의didFinishLaunchingWithOptions: 방법에서는CoreData를 초기화할 수 있고 아주 적은 일을 고려할 수 있습니다.만약storyboard를 사용한다면, 이 방법에서 시작 그림을 계속 표시할 수 있습니다.
    영구 저장 (NSPersistentStore) 을 영구 저장 조정원 (NSPersistentStore Coordinator) 에 추가하여 코어 데이터 초기화의 일부분으로 백엔드 대기열에 분배합니다.이 작업이 차지하는 시간은 알 수 없고, 홈 팀 열에서 이 작업을 실행하면 사용자 인터페이스가 막혀 프로그램이 종료될 수 있습니다.
    영구 저장 (NSPersistentStore) 이 영구 저장 코디네이터 (NSPersistentStore Coordinator) 에 추가되면, 홈 열을 호출해서 사용자 인터페이스를 불러오고, 사용자를 보여줄 수 있습니다.
    응용 프로그램 에이전트(Application Delegate)에서 Core Data(Separating Core Data the Application Delegate) 분리
    이전에 iOS에서 응용 에이전트(Application Delegate)에서 코어 데이터 창고의 초기화는 전형적인 것이다.그러나 이로 인해 코드는 응용 생명 주기에 매우 혼란스러울 수 있다.
    최상위 컨트롤러 (Controller) 대상에 코어 데이터 창고를 만들고, 이 컨트롤러 (Controller) 대상을 초기화하고 인용하도록 프로그램을 설정합니다.이 방식은 Core Data의 코드를 자체 컨트롤러 (Controller) 에서 통합시키고, 응용 프로그램 에이전트 (Application Delegate) 를 상대적으로 깨끗하게 합니다.이 독립된 컨트롤러 (Controller) 에는 코어 데이터 창고를 초기화하는 상세한 방법이 표시됩니다.
    iOS app가 Core Data 스택에서 코드를 통합하기 위해 프로그램 에이전트(Application Delegate)에 컨트롤러(Ctroller) 속성(위에서 언급한 컨트롤러)을 추가할 수 있습니다.또한 애플리케이션 DidFinishLaunching: 이 라이프 사이클을 초기화합니다.
    Objective-C
    @interface AppDelegate : UIResponder 
     
    @property (strong, nonatomic) UIWindow *window;
    @property (strong, nonatomic) DataController *dataController;
     
    @end
     
    @implementation AppDelegate
     
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    {
        [self setDataController:[[DataController alloc] initWithCompletionBlock:^{
            //Complete user interface initialization
        }]];
        return YES;
    }
    

    Swift
    class AppDelegate: UIResponder, UIApplicationDelegate {
        
        var window: UIWindow?
        var dataController: DataController!
        
        func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey : Any]? = nil) -> Bool {
            dataController = DataController() {
                //Complete user interface initialization
            }
            return true
    }
    

    단독 컨트롤러 (Controller) 대상을 초기화하면 코어 데이터 창고의 코드를 응용 프로그램 에이전트 (Application Delegate) 에서 옮길 수 있지만, 전체 응용 프로그램에서 코어 데이터에 접근할 수 있습니다.

    좋은 웹페이지 즐겨찾기