Теряю рассудок Причина Получение основных данных всегда возвращает ошибку

Ладно, сразу к делу ...

это первый раз, когда я использую Magical record From Magical Panda. Я следил за уроком от http://yannickloriot.com/2012/03/magicalrecord-how-to-make-programming-with-core-data-приятный/

а вот мой код

Person.h

@property (nonatomic, retain) NSString * firstname;
@property (nonatomic, retain) NSString * lastname;
@property (nonatomic, retain) NSNumber * age;

AppDelegate.M

@implementation AppDelegate

- (void)dealloc
{
    [_window release];
    [_viewController release];
    [super dealloc];
}

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
     [MagicalRecord setupCoreDataStackWithStoreNamed:@"MyDatabase.sqlite"];
    self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
    // Override point for customization after application launch.
    self.viewController = [[JASidePanelController alloc] init];
    self.viewController.shouldDelegateAutorotateToVisiblePanel = NO;
  //  self.viewController = [[[ViewControllerCenter alloc] initWithNibName:@"ViewController" bundle:nil] autorelease];
    self.viewController.centerPanel = [[UINavigationController alloc] initWithRootViewController:[[ViewControllerCenter alloc] init]];

    //UINavigationController *navContorller=[[UINavigationController alloc] initWithRootViewController:self.viewController];
    self.viewController.rightPanel = [[NetraRightWindow alloc] init];
    self.window.rootViewController = self.viewController;
    [self.window makeKeyAndVisible];

    return YES;
}

- (void)applicationWillResignActive:(UIApplication *)application
{
    // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
    // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.
}

- (void)applicationDidEnterBackground:(UIApplication *)application
{


    // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. 
    // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
}

- (void)applicationWillEnterForeground:(UIApplication *)application
{
    // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background.
}

- (void)applicationDidBecomeActive:(UIApplication *)application
{

}

- (void)applicationWillTerminate:(UIApplication *)application
{
     [MagicalRecord cleanUp];
    // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
}

@end

это мой метод сохранения:

-(void)fetchRecords{

   NSManagedObjectContext *localContext= [NSManagedObjectContext MR_defaultContext];

    // Create a new Person in the current thread context
    Person *person                          = [Person MR_createInContext:    [NSManagedObjectContext MR_defaultContext]];
    person.firstname                        = @"Test";
    person.lastname                         = @"merdeka123";
    person.age=[NSNumber numberWithInt:123];

    [[NSManagedObjectContext MR_defaultContext] MR_save];
    NSArray *Result=[Person MR_findAll];

    NSLog(@"Result==%@",Result);

и результат:

2012-11-25 15:43:38.033 Trip[10491:15e03] Cok==(
    "<Person: 0x866fe40> (entity: Person; id: 0x866e170 <x-coredata://15583C03-3EB4-479B-9EF2-B0BC750FC987/Person/p1> ; data: <fault>)",
    "<Person: 0x866fe80> (entity: Person; id: 0x8670210 <x-coredata://15583C03-3EB4-479B-9EF2-B0BC750FC987/Person/p2> ; data: <fault>)",
    "<Person: 0x81471a0> (entity: Person; id: 0x815c2a0 <x-coredata://15583C03-3EB4-479B-9EF2-B0BC750FC987/Person/p3> ; data: {\n    age = 123;\n    firstname = Test;\n    lastname = merdeka123;\n    time = nil;\n})"
)

почему это всегда ошибка данных? это проблема в магической записи? или что-то не так в моем коде?


person Netra    schedule 25.11.2012    source источник
comment
Ошибка может показаться плохой, но на самом деле это оптимизация выборки основных свойств данных для управляемых объектов.   -  person CodaFi    schedule 25.11.2012
comment
это способ показать данные в NSLOG?   -  person Netra    schedule 25.11.2012
comment
Традиционный способ - использовать -valueForKey: для фактического получения данных, а не ошибок, но я недостаточно использовал магическую запись, чтобы дать вам приемлемое решение.   -  person CodaFi    schedule 25.11.2012
comment
:( это следующие руководства yannickloriot .com / 2012/03 /   -  person Netra    schedule 25.11.2012
comment
Ненавижу говорить тебе, чувак, но Интернет во многом ошибается. :П. возможно, поиграйте с этим самостоятельно, прежде чем переходить на какой-нибудь случайный веб-сайт для получения руководств по разработке. Кроме того, вам не отрубают голову из-за того, что время от времени генерируется исключение.   -  person CodaFi    schedule 25.11.2012
comment
LOL .. ладно, чувак ... у тебя есть мгновенное сообщение?   -  person Netra    schedule 25.11.2012
comment
позвольте нам продолжить это обсуждение в чате   -  person Netra    schedule 25.11.2012


Ответы (2)


Это не ошибка - это функция Core Data, называемая «сбой». Вот описание Apple:

Сбой уменьшает объем памяти, потребляемой вашим приложением. Ошибка - это объект-заполнитель, который представляет управляемый объект, который еще не был полностью реализован, или объект коллекции, представляющий связь:

Ошибка управляемого объекта - это экземпляр соответствующего класса, но его постоянные переменные еще не инициализированы. Ошибка отношения - это подкласс класса коллекции, который представляет отношение. Ошибка позволяет Core Data наложить границы на граф объекта. Поскольку сбой не реализуется, сбой управляемого объекта потребляет меньше памяти, а управляемые объекты, связанные с сбоем, вообще не обязательно должны быть представлены в памяти.

Если вы хотите увидеть каждый объект Person, вам нужно будет получить к ним особый доступ.

person sosborn    schedule 25.11.2012
comment
@sosborn ... но они говорят, что если я хочу видеть каждого человека, просто введите: NSArray * Result = [Person MR_findAll]; NSLog (@Result ==% @, результат); - person Netra; 25.11.2012
comment
Получите доступ к одному из атрибутов этого результата, а не только к отношениям. - person sosborn; 25.11.2012
comment
@sosborn, поэтому CoreData выполняет сбой только для отношения, а не для свойства объекта, верно? См. raywenderlich.com/934/ < b> Однако с данными Core вы не можете получить только определенные атрибуты объекта - вы должны получить весь объект - person onmyway133; 19.11.2013
comment
@entropy - stackoverflow.com/questions/6262024/ - person sosborn; 23.11.2013
comment
@sosborn Я уже смотрел на этот вопрос, но все еще не понимаю - person onmyway133; 23.11.2013

Я также постоянно ошибался в Magical Records. После множества тряпок головами.

[[NSManagedObjectContext defaultContext] saveToPersistentStoreWithCompletion:^(BOOL success, NSError *error) {

if (!success) {

NSLog(@"::: Error saving context :::");

}

}];

Теперь, когда вы найдете все. проверьте объекты, выполнив печать в отладчике.

Person *testObject = [Result objectAtIndex:0];
NSLog(@"%@", testObject.firstname);

Это должно напечатать ваш результат в отладчике.

person Muhammad_Awaab    schedule 11.05.2015