objective-c - CoreData 关系故障?

标签 objective-c ios cocoa-touch core-data

我有一个与单位有“对多”关系的订单。当我尝试按顺序记录单位(NSSet)时,出现错误错误:

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Order" 
                                          inManagedObjectContext:mainContext];
[fetchRequest setEntity:entity];
NSArray *fetchedObjects = [mainContext executeFetchRequest:fetchRequest 
                                                     error:nil];
for (Order *order in fetchedObjects) {

    NSLog(@"%@", [order units]);
    break;
}        
[fetchRequest release];

结果:

Relationship 'units' fault on managed object (0x6d9dd00) <Order: 0x6d9dd00> (entity: Order; id: 0x6d88e40 <x-coredata://97A3F3D5-ABA7-499A-A460-5E25CF49C528/Order/p1> ; data: {
    composition = Hemlock;
    condition = "";
    consignee = "";
    consigneeCompanyName = "";
    contactAlternatePhone = "";
    contactEmail = "";
    contactFirstName = "";
    contactLastName = "";
    contactPhone = "";
    customer = "Havard Empire";
    customerCompanyName = "";
    customerNotes = "";
    dateDue = "1/13/2012 12:00:00 AM";
    dateEntered = "1/6/2012 12:00:00 AM";
    dateOrdered = "1/6/2012 12:00:00 AM";
    deliveryAddress1 = "";
    deliveryAddress2 = "";
    deliveryCity = "";
    deliverySpecialInstructions = "";
    deliveryState = "";
    deliveryZip = "";
    depth = 01;
    detail = "";
    freightRate = "";
    grade = Cull;
    instructionsDirectionsNotes = "";
    lastUpdated = "1/6/2012 3:00:43 PM";
    length = 01;
    location = "Lucedale, ms";
    matsPerLoad = "";
    memoLineNotes = "";
    notes = "";
    orderID = 201205134922479;
    orderNumber = 01062012;
    pUP = Cable;
    pricePerItem = "";
    purchaseOrderNumber = "";
    pushToQuickBooks = True;
    quantity = 0;
    quickbooksCompany = 1;
    salesman = "Accounting Adj";
    separateRate = False;
    taxRate = "";
    totalLoads = "";
    type = "2ply Mat";
    units = "<relationship fault: 0x6dacf20 'units'>";
    vendorID = 10;
    width = 01;
})

不打印单位。它说 "<relationship fault: 0x6dacf20 'units'>";

另外,当我只需要单位时,为什么要打印整个对象?

最佳答案

这不是错误 - 它是 Core Data 的一个称为“故障”的功能。这是苹果的 description :

Faulting reduces the amount of memory your application consumes. A fault is a placeholder object that represents a managed object that has not yet been fully realized, or a collection object that represents a relationship:

A managed object fault is an instance of the appropriate class, but its persistent variables are not yet initialized. A relationship fault is a subclass of the collection class that represents the relationship. Faulting allows Core Data to put boundaries on the object graph. Because a fault is not realized, a managed object fault consumes less memory, and managed objects related to a fault are not required to be represented in memory at all.

如果您想查看每个 Unit 对象,则必须专门访问它们。请尝试以下操作:

for (Order *order in fetchedObjects) {
    for (Unit *unit in [order units]) {
       NSLog(@"%@", unit);
       //I am not at a computer, so I cannot test, but this should work. You might have to access each property of the unit object to fire the fault, but I don't believe that is necessary.
    }
}     

关于objective-c - CoreData 关系故障?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8876234/

相关文章:

ios - 如何在 safari 和 chrome 中运行共享扩展?

javascript - 滚动到维基百科上的特定段落

ios - RxSwift 简单 withLatestFrom 不触发

objective-c - 获取JSON字典中的所有值,而无需按键访问

iOS EXC_BAD_ACCESS : How to debug?

objective-c - iOS UITableView numberOfRowsInSection 错误访问

ios - 添加白色状态栏

objective-c - 如何在 Objective C 中将 PNG 或 JPEG 转换为 UIBezierPath

objective-c - .m 文件的引用在哪里?

objective-c - 如何在 Cocoa Objective-c 中创建 UI 标签?