gpt4 book ai didi

ios - 从服务器上的特定嵌套核心数据实体上传图像的通用且简单的方法?

转载 作者:行者123 更新时间:2023-11-28 21:36:15 25 4
gpt4 key购买 nike

我有一个与“PLContact”实体有一对多关系的“Property”实体。 PLContact 实体与“PhotoGraph”实体再次具有一对多关系。像这样:

@interface Property (CoreDataGeneratedAccessors)
- (void)insertObject:(PLContact *)value inContactsAtIndex:(NSUInteger)idx;
- (void)removeObjectFromContactsAtIndex:(NSUInteger)idx;
- (void)insertContacts:(NSArray<PLContact *> *)value atIndexes:(NSIndexSet *)indexes;
- (void)removeContactsAtIndexes:(NSIndexSet *)indexes;
- (void)replaceObjectInContactsAtIndex:(NSUInteger)idx withObject:(PLContact *)value;
- (void)replaceContactsAtIndexes:(NSIndexSet *)indexes withContacts:(NSArray<PLContact *> *)values;
- (void)addContactsObject:(PLContact *)value;
- (void)removeContactsObject:(PLContact *)value;
- (void)addContacts:(NSOrderedSet<PLContact *> *)values;
- (void)removeContacts:(NSOrderedSet<PLContact *> *)values;
@end

@interface PLContact (CoreDataGeneratedAccessors)
- (void)insertObject:(PLPhotoGraph *)value inPhotoGraphsAtIndex:(NSUInteger)idx;
- (void)removeObjectFromPhotoGraphsAtIndex:(NSUInteger)idx;
- (void)insertPhotoGraphs:(NSArray<PLPhotoGraph *> *)value atIndexes:(NSIndexSet *)indexes;
- (void)removePhotoGraphsAtIndexes:(NSIndexSet *)indexes;
- (void)replaceObjectInPhotoGraphsAtIndex:(NSUInteger)idx withObject:(PLPhotoGraph *)value;
- (void)replacePhotoGraphsAtIndexes:(NSIndexSet *)indexes withPhotoGraphs:(NSArray<PLPhotoGraph *> *)values;
- (void)addPhotoGraphsObject:(PLPhotoGraph *)value;
- (void)removePhotoGraphsObject:(PLPhotoGraph *)value;
- (void)addPhotoGraphs:(NSOrderedSet<PLPhotoGraph *> *)values;
- (void)removePhotoGraphs:(NSOrderedSet<PLPhotoGraph *> *)values;
@end

我面临的问题是每个 photoGraph 都包含一个针对属性“photo”的图像,我需要将图像一张一张地上传到服务器上。我需要检查每个“PhotoGraph”对象,如果 (photo != nil),则上传,否则保留它。

在拥有“属性”对象的同时,我该怎么做?

我尝试过将属性实体模型转换为字典值。

NSDictionary *jsonString = [property dictionaryValues];

然后我得到像这样的 keyPaths:

- (void) obtainKeyPaths:(id)val intoArray:(NSMutableArray*)arr withString:(NSString*)s forObject:(id)object {
if ([val isKindOfClass:[NSDictionary class]]) {
for (id aKey in [val allKeys]) {
NSString* path =
(!s ? aKey : [NSString stringWithFormat:@"%@.%@", s, aKey]);
id photoGraph = [object valueForKeyPath:path];
NSLog(@"%@", photoGraph);
if ([photoGraph isKindOfClass:[PLPhotoGraph class]]) {
[arr addObject: path];
}
[self obtainKeyPaths: [val objectForKey:aKey]
intoArray: arr
withString: path forObject:object];
}
}
}

获取 keyPath 后,我正在上传如下图片:

for (NSString *keyPath in arr) {
id photoGraph = [object valueForKeyPath:keyPath];
if ([photoGraph isKindOfClass:[PLPhotoGraph class]]) {
//Upload image now.
}
}

对此有什么更简单和更通用的方法?

最佳答案

根据您的描述和代码,您有一个Property,您想要查看其相关的PLContact 并获取每个联系人的照片。从您的代码看来,您的数据模型包括以下内容:

  • 实体 Property 具有称为 contacts 的对多关系,其目标是 PLContact 实体。
  • 实体 PLContact 有一个称为 photoGraphs 的对多关系,其目标是 PLPhotoGraph 实体。

您正在通过查看每个属性以查看其值是否为正确类型来以艰难的方式做事。不过,您已经拥有 Core Data 关系,因此您可以使用关系名称查找值。

使用键值编码,您可以使用 [property valueForKeyPath:@"contacts.photoGraphs"] 获取照片。但是由于 contactsphotoGraphs 都是对多关系,因此您会得到一组照片。要获得单个 PLPhotoGraph 对象的平面数组,您需要执行以下操作:

NSMutableArray *allPhotos = [NSMutableArray array];
for (NSArray *photoGraphs in [property valueForKeyPath:@"contacts.photoGraphs"]) {
[allPhotos addObjectsFromArray:photoGraphs];
}

完成后,allPhotos 拥有可以从您开始使用的 property 中找到的每个 PLPhotoGraph

关于ios - 从服务器上的特定嵌套核心数据实体上传图像的通用且简单的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33827470/

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