2015-10-21 3 views
0

Я установил Core Data Stack с помощью MagicalRecord, используя метод -setupCoreDataStackWithStoreNamed:.MagicalRecord Не удается получить доступ к свойствам ManagedObject

И я создал DataModel и ManagedObject имени DriverOrder с некоторыми атрибутами и создал подкласс ManagedObject автоматически, как этого

Позже я пишу некоторые коды для создания объекта и попытаться получить доступ объект в классе ViewController.

код так:

- (void)testCoreData { 
    NSManagedObjectContext *context = [NSManagedObjectContext MR_context]; 
    DriverOrder *order = [DriverOrder MR_createEntityInContext:context]; 
    order.driverId = @"11"; 
    order.orderID = @(2015); 

    DriverOrder *order2 = [DriverOrder MR_createEntityInContext:context]; 
    order2.driverId = @"15"; 
    order2.orderID = @(2016); 

    [context MR_saveOnlySelfAndWait]; 
    NSArray *resultArr = [self fetchAllOrder]; 
    for (DriverOrder *theorder in resultArr) { 
     DDLog(@"%@",theorder); 
    } 
} 

- (NSArray *)fetchAllOrder { 
    NSArray *orders = [DriverOrder MR_findAllSortedBy:@"orderID" ascending:YES]; 
    return orders; 
} 

ОБНОВЛЕНИЕ:

О подклассу NSManagedObject, то DriverOrder был сгенерирован Xcode автоматически и я не делать ничего об этом классе, он кажется, что это:

// 
// DriverOrder.h 
// 
// 
// Created by lynulzy on 10/21/15. 
// 
// 

#import <Foundation/Foundation.h> 
#import <CoreData/CoreData.h> 

NS_ASSUME_NONNULL_BEGIN 

@interface DriverOrder : NSManagedObject 

// Insert code here to declare functionality of your managed object subclass 

@end 

NS_ASSUME_NONNULL_END 

#import "DriverOrder+CoreDataProperties.h" 



// 
// DriverOrder+CoreDataProperties.h 
// 
// 
// Created by lynulzy on 10/21/15. 
// 
// 
// Choose "Create NSManagedObject Subclass…" from the Core Data editor menu 
// to delete and recreate this implementation file for your updated model. 
// 

#import "DriverOrder.h" 

NS_ASSUME_NONNULL_BEGIN 

@interface DriverOrder (CoreDataProperties) 

@property (nullable, nonatomic, retain) NSNumber *orderID; 
@property (nullable, nonatomic, retain) NSString *driverId; 

@end 

NS_ASSUME_NONNULL_END 

Когда я построить и запустить приложение, вопросы приходят:

  1. Каков путь * .sqlite?
  2. Когда я попытался получить свойство извлеченного объекта, журнал отладка выглядит неправильно и используя метод получения доступа к журналу отладка выглядит следующим образом:
+0

Этот код является беспорядок и нечитаемым. вы хотите, чтобы люди помогали вам, убедитесь, что вы не получаете калечащих сообщений. На боковой ноте: покажите подкласс NSManagedObject для DriverOrder. – Andy

+0

@ Andy Я просто генерирую DriverOrder по Xcode автоматически, и я обновил код в своем описании вопроса. THX – lynulzy

ответ

0

Скорее всего, вы испытываете это, потому что вы добавили новые поля в свою модель, и CoreData не удалось перенести данные автоматически.

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

Я лично использую что-то вроде этого:

[MagicalRecord setupAutoMigratingCoreDataStack]; 

#if DEBUG 
    // Drop database on model mismatch during development 
    [MagicalRecord setShouldDeleteStoreOnModelMismatch:YES]; 
#endif 

MagicalRecord автоматически Crafts URL для вашей базы данных. При использовании одного постоянного хранилища, а затем, чтобы получить путь к базе данных SQL можно использовать следующий (после инициализации CoreData с MagicalRecord):

NSLog(@"Persistent store URL: %@", [[NSPersistentStore MR_defaultPersistentStore] URL]); 
Смежные вопросы