gpt4 book ai didi

iphone - iOS Core 数据关系故障

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:50:00 24 4
gpt4 key购买 nike

我有一个包含 3 个实体的核心数据模型。驱动程序、 list 和作业。

每个Manifest有一个driver,每个Driver有多个Manifest,每个Manifest可以有一个或多个Jobs,每个Job引用一个Manifest。

当我像这样构建对象时

//Loop through all the Manifests for the driver
for (SDZManifest *manifest in allData)
{
//Create an new instance of manifest in core data
Manifest *newManifest = (Manifest*)[[SKCoreDataManager sharedInstance] insertObjectforEntity:kEntity_Manifest];

// ***
// Set the data for this manifest
// ***
[newManifest setDriverID:[NSNumber numberWithInt:[manifest DriverId]]];
[newManifest setManifestID:[manifest ManifestId]];
[newManifest setManifestRef:[manifest ManifestRef]];
[newManifest setSupplierID:[NSNumber numberWithInt:[manifest SupplierId]]];
[newManifest setTruckID:[NSNumber numberWithInt:[manifest TruckId]]];

//Get all the jobs for the manifest
NSArray *allJobsForManifest = [manifest Jobs];
NSMutableArray *formattedJobsForManifest = [NSMutableArray array];

//Loop through all the Jobs for this manifiest
for (SDZJob *job in allJobsForManifest)
{
//Set the returned data into a Job object
Job *newJob = (Job*)[[SKCoreDataManager sharedInstance] insertObjectforEntity:kEntity_Job];

[newJob setInstructions:[job Instructions]];

[newJob setDateCreated:[job DateCreated]];

[newJob setCreatedBy:[job CreatedBy]];

[newJob setIsLive:[NSNumber numberWithBool:[job IsLive]]];

[newJob setCollectionSequence:[NSNumber numberWithInt:[job CollectionSequence]]];

[newJob setPlannedDeliveryDate:[job PlannedDeliveryDate]];
[newJob setPlannedCollectionDate:[job PlannedCollectionDate]];

[newJob setCustomerRef:[job CustomerRef]];
[newJob setCustomerName:[job CustomerName]];

// ***
// Collection address
// ***

//Break down the address
SDZAddress *collectionAddress = [job CollectionAddress];
[newJob setCollectionAddressID:[NSNumber numberWithInt:[collectionAddress Id]]];
[newJob setCollectionAddressLine1:[collectionAddress line1]];
[newJob setCollectionAddressLine2:[collectionAddress line2]];
[newJob setCollectionAddressLine3:[collectionAddress line3]];
[newJob setCollectionAddressCity:[collectionAddress city]];
[newJob setCollectionAddressCounty:[collectionAddress county]];
[newJob setCollectionAddressCountry:[collectionAddress country]];
[newJob setCollectionAddressPostcode:[collectionAddress postcode]];

//Get the lat and lng of the collection address
SDZGeoLocation *collectionAddressLatLng = [collectionAddress Geocode];
[newJob setCollectionAddressLat:[collectionAddressLatLng Lat]];
[newJob setCollectionAddressLng:[collectionAddressLatLng Lng]];

// ***
// Delivery address
// ***

//Break down the address
SDZAddress *deliveryAddress = [job DeliveryAddress];
[newJob setDeliveryAddressID:[NSNumber numberWithInt:[deliveryAddress Id]]];
[newJob setDeliveryAddressLine1:[deliveryAddress line1]];
[newJob setDeliveryAddressLine2:[deliveryAddress line2]];
[newJob setDeliveryAddressLine3:[deliveryAddress line3]];
[newJob setDeliveryAddressCity:[deliveryAddress city]];
[newJob setDeliveryAddressCounty:[deliveryAddress county]];
[newJob setDeliveryAddressCountry:[deliveryAddress country]];
[newJob setDeliveryAddressPostcode:[deliveryAddress postcode]];

//Get the lat and lng of the collection address
SDZGeoLocation *deliveryAddressLatLng = [deliveryAddress Geocode];
[newJob setDeliveryAddressLat:[deliveryAddressLatLng Lat]];
[newJob setDeliveryAddressLng:[deliveryAddressLatLng Lng]];

[formattedJobsForManifest addObject:newJob];

NSLog(@"\n\n-- NEW JOB --\n%@\n\n", newJob);
}
//Show all Jobs for this manifest
NSLog(@"\n\n-- JOBS FOR MANIFEST --\n%@\n\n", formattedJobsForManifest);

}

然后我将该 Manifest 对象保存到核心数据。

当他们单击表格 View 单元格时,我从 list 数组中获取对象并将其传递给另一个 View 。当我记录传递的 list 时,它会记录:

-- PASSED MANIFEST --
<Manifest: 0xe59d540> (entity: Manifest; id: 0xe59c3e0 <x-coredata://9F572794-745F-4E43-B4D0-9EC3506EA6E4/Manifest/p5> ; data: {
driver = nil;
driverID = 1;
jobs = "<relationship fault: 0x7b3d290 'jobs'>";
manifestID = "f705c777-9455-4792-bd84-2deada410dab";
manifestRef = 001;
supplierID = 2;
truckID = 8;
})

当我记录 NSLog(@"\n\n-- PASSED MANIFEST JOBS --\n%@\n\n", [passedManifest jobs]); 结果是

-- PASSED MANIFEST JOBS --
Relationship 'jobs' fault on managed object (0xe59d540) <Manifest: 0xe59d540> (entity: Manifest; id: 0xe59c3e0 <x-coredata://9F572794-745F-4E43-B4D0-9EC3506EA6E4/Manifest/p5> ; data: {
driver = nil;
driverID = 1;
jobs = "<relationship fault: 0x7b3d290 'jobs'>";
manifestID = "f705c777-9455-4792-bd84-2deada410dab";
manifestRef = 001;
supplierID = 2;
truckID = 8;
})

为什么它说 托管对象 (0xe59d540) 上的关系“工作”错误

当我 NSLog(@"\n\n-- JOB COUNT --\n%u\n\n", [[passedManifest jobs] count]); 它返回 0

最佳答案

我刚刚遇到了完全相同的问题。我想我仍然不完全确定为什么,但似乎直到比您预期的晚才真正获取关系。不过,预取它们实际上非常简单。只需将以下内容添加到您的核心数据请求中...

[request setRelationshipKeyPathsForPrefetching:@[ @"relationship_name" ]];

您可以通过这种方式预加载多个关系,也就是数组。

关于iphone - iOS Core 数据关系故障,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12769717/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com