Core Data iCloud 获取有时不会产生数据(iOS)
Posted
技术标签:
【中文标题】Core Data iCloud 获取有时不会产生数据(iOS)【英文标题】:Core Data iCloud fetch sometimes yields no data (iOS) 【发布时间】:2015-10-14 02:31:31 【问题描述】:我在使用 iCloud Core Data 的测试应用程序中遇到问题。当触摸表格视图中的部分条目时会触发特定问题,这会触发整个表格条目在全屏上显示。一种标准的表格视图。
表格视图单元格包含一个唯一的记录 ID,该 ID 被传递到详细显示视图中。在启动视图时,视图控制器会使用完整的记录数据并将其绘制在屏幕上。
这是用于执行此操作的代码:
- (void)viewDidLoad
[super viewDidLoad];
NSString *temp_text;
Item *fetchSelectedItem;
NSString *updateUniqueID;
NSArray *tempFetchedObjects;
NSError *error;
int stopper;
localFindItDataController = [[FindItDataController alloc] init];
NSFetchRequest *fetch = [[NSFetchRequest alloc] init];
NSEntityDescription *entityDescription = [NSEntityDescription entityForName:@"Item" inManagedObjectContext: localFindItDataController.managedObjectContext];
[fetch setEntity:entityDescription];
updateUniqueID = [localItem.itemUniqueID stringValue];
[fetch setPredicate:[NSPredicate predicateWithFormat:@"(ANY itemUniqueID = %@)",updateUniqueID]];
tempFetchedObjects = [localFindItDataController.managedObjectContext executeFetchRequest:fetch error:&error];
NSLog(@"did the fetch work %@ %lu", updateUniqueID, (unsigned long)[tempFetchedObjects count]);
if ([tempFetchedObjects count] == 0)
stopper = 1;
fetchSelectedItem = [tempFetchedObjects objectAtIndex:0];
NSLog(@"only executes if fetch was ok");
localItem = fetchSelectedItem;
temp_text = localItem.itemName;
contentsWhatBox.text = temp_text;
temp_text = localItem.itemLocation;
contentsWhereBox.text = temp_text;
temp_text = localItem.itemDescription;
contentsOtherInfoBox.text = temp_text;
UIImage *tempImage = [UIImage imageWithData:localItem.itemPicture];
CGImageRef imageRef = [self CGImageRotatedByAngle:[tempImage CGImage] angle:270];
UIImage* img = [UIImage imageWithCGImage: imageRef];
contentsImageBox.image = img;
tapImage = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapImageGesture)];
[contentsImageBox setUserInteractionEnabled:YES];
[contentsImageBox addGestureRecognizer:tapImage];
大多数情况下这工作得很好,但有时即使确实有与 fetch 谓词匹配的数据,fetch 也会出现空。有时我可以点击一个表格视图条目,看到它出现,在表格视图条目之间来回切换几次,回到原始条目并且获取失败。
我有点不知所措,欢迎任何帮助。提前致谢。
编辑#1:
这是正在获取的对象。可能很重要,所以我稍后添加:
@interface Item : NSManagedObject
@property (nonatomic, retain) NSString * itemName;
@property (nonatomic, retain) NSString * itemLocation;
@property (nonatomic, retain) NSString * itemDescription;
@property (nonatomic, retain) NSData * itemPicture;
@property (nonatomic, retain) NSNumber * itemUniqueID;
@property (nonatomic, retain) NSNumber * itemNumber1;
@property (nonatomic, retain) NSNumber * itemNumber2;
@property (nonatomic, retain) NSString * itemAttribute1;
@property (nonatomic, retain) NSString * itemAttribute2;
@property (nonatomic, retain) NSString * itemAttribute3;
@property (nonatomic, retain) NSString * itemTimestamp;
@end
编辑#2:
我忘了提到在“错误”提取之后提取的错误对象为零。
编辑#3:
添加了一个循环来检查我是否得到了结果,并在退出之前重试了一定次数,并且工作正常。我不确定为什么会这样,但我怀疑 iCloud 数据中的图像可能是问题的一部分,即使此时的数据肯定已复制到 ios 测试设备。
【问题讨论】:
【参考方案1】:添加了一个循环来检查我是否得到了结果,并在退出之前重试了一定次数,并且工作正常。我不确定为什么会这样,但我怀疑 iCloud 数据中的图像可能是问题的一部分,即使此时的数据肯定已复制到 iOS 测试设备。
【讨论】:
以上是关于Core Data iCloud 获取有时不会产生数据(iOS)的主要内容,如果未能解决你的问题,请参考以下文章
Core Data 应用程序中的 UITableView 不会更新第二个设备的主视图,除非重新启动应用程序,并使用 iCloud 同步