2014-07-17 9 views
1

코어 데이터를 지원하지 않고 Xcode 5.1.1에서 프로젝트를 만들었습니다.기존 프로젝트에 코어 데이터를 사용할 수 없습니다.

이제 핵심 데이터 지원을 얻으려고합니다.

단계 :

1) 파일 -> 새로 만들기 -> 파일 -> 데이터 모델 -> 추가.

It created : samplecd.xcdatamodeld 

2) 추가 엔티티 :

myname type: String 

3)

내가 '코어가 하나 개 더 프로젝트를 만든
AppDelegate.h 및 AppDelegate.m의 변화를 수행하려면 데이터 '를 활성화하고 아래 내용을
으로 이전 프로젝트에 복사했습니다.

AppDelegate.h

@property (readonly, strong, nonatomic) NSManagedObjectContext *managedObjectContext; 
@property (readonly, strong, nonatomic) NSManagedObjectModel *managedObjectModel; 
@property (readonly, strong, nonatomic) NSPersistentStoreCoordinator *persistentStoreCoordinator; 

- (void)saveContext; 
- (NSURL *)applicationDocumentsDirectory; 

AppDelegate.m

- (void)saveContext 

{ 

    NSError *error = nil; 

    NSManagedObjectContext *managedObjectContext = self.managedObjectContext; 

    if (managedObjectContext != nil) { 

    if ([managedObjectContext hasChanges] && ![managedObjectContext save:&error]) { 

     NSLog(@"Unresolved error %@, %@", error, [error userInfo]); 
     abort(); 

    } 

} 

}

#pragma mark - Core Data stack 

// Returns the managed object context for the application. 
// If the context doesn't already exist, it is created and bound to the persistent store coordinator for the application. 
- (NSManagedObjectContext *)managedObjectContext 
{ 
    if (_managedObjectContext != nil) { 
     return _managedObjectContext; 
    } 

    NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator]; 
    if (coordinator != nil) { 
     _managedObjectContext = [[NSManagedObjectContext alloc] init]; 
     [_managedObjectContext setPersistentStoreCoordinator:coordinator]; 
    } 
    return _managedObjectContext; 
} 





- (NSManagedObjectModel *)managedObjectModel 
{ 
    if (_managedObjectModel != nil) { 
     return _managedObjectModel; 
    } 
    NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"withcoredata" withExtension:@"momd"]; 
    _managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL]; 
    return _managedObjectModel; 
} 


- (NSPersistentStoreCoordinator *)persistentStoreCoordinator 
{ 
    if (_persistentStoreCoordinator != nil) { 
     return _persistentStoreCoordinator; 
    } 

    NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"withcoredata.sqlite"]; 

    NSError *error = nil; 
    _persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]]; 
    if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error]) { 


    NSLog(@"Unresolved error %@, %@", error, [error userInfo]); 
     abort(); 
    }  

    return _persistentStoreCoordinator; 
} 



#pragma mark - Application's Documents directory 

// Returns the URL to the application's Documents directory. 
- (NSURL *)applicationDocumentsDirectory 
{ 
    return [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject]; 
} 

는 ERROR :

나는 일 수 아래의 컴파일 오류 e :

"AppDelegate.m:122:35: Receiver 'NSManagedObjectContext' for class message is a forward declaration" 

AppDelegate.m:122:34: Receiver type 'NSManagedObjectContext' for instance message is a forward declaration 

이 문제를 해결하는 방법은 무엇입니까?

+0

는 당신이'NSManagedObjectContext.h'를 가져 마십시오 AppDelegate.m? –

+0

아 .. AppDelegate.h에서 # import 가 필요한 것 같습니다. 그것은 작동하지 않습니다. :) – DrunkenMaster

+0

Dheeraj 완료. :) – DrunkenMaster

답변

1

핵심 데이터 모델의 이름은 samplecd하고 당신의 SQLite 데이터베이스 이름은 withcoredata 모두 이름이 기존 프로젝트에서 핵심 데이터를 사용하는 유사해야합니다. 이름을 변경하고 문제가 해결되었는지 알려주십시오. YourApp-Prefix.pch

#import <CoreData/CoreData.h> 

과에 :

+0

withcoredata는 두 곳이 있는데,이 이름을 xcdatamodeld 파일 이름이나 프로젝트 이름 자체로 변경해야합니까? – DrunkenMaster

+0

두 가지 이름을 모두 동일하게 만드십시오. 귀하의 경우 ** withcoredata **를 ** samplecd **로 대체하십시오. –

+0

당신이 이것을 원한다면이 게시물을 대답으로 표시하십시오. –

0

당신은 당신의 AppDelegte.h 파일에 CoreData/CoreData.h을 가져와야

#ifdef __OBJC__ 
    #import <UIKit/UIKit.h> 
    #import <Foundation/Foundation.h> 
    #import <CoreData/CoreData.h> 
#endif 
관련 문제