У меня проблема в моем тестовом приложении с использованием iCloud Core Data. Конкретная проблема возникает, когда затрагивается частичная запись в виде таблицы, которая запускает полную запись таблицы, которая будет отображаться на полноэкранном режиме. Вид стандартного вида таблицы.Основные данные iCloud fetch иногда не дает данных (iOS)
В ячейке представления таблицы содержится уникальный идентификатор записи, который передается в виде подробного отображения. При запуске представления контроллер просмотра получает данные полной записи и рисует их на экране.
Вот код, который используется, чтобы сделать это:
- (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];
}
В основном это работает просто отлично, но иногда выборки приходит пустым, хотя определенно есть данные, что соответствует предикат выборки. Иногда я могу нажимать на запись в виде таблицы, видеть, как она появляется, переходить туда и обратно несколько раз между записями табличного представления, возвращаться к исходной записи и сбой извлечения.
Я нахожусь в убытке, и любая помощь будет приветствоваться. Заранее спасибо.
Edit # 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
Edit # 2:
Я забыл упомянуть, что объект ошибки из выборки равна нулю, после того, как «плохой» выборки.
Edit # 3:
Добавлен цикл, чтобы проверить, если я получил результат и повторить определенное количество раз, прежде чем бросить курить, и это работало нормально. Я не уверен, почему это происходит, но я подозреваю, что изображение в данных iCloud может быть частью проблемы, даже если данные в этой точке наверняка реплицируются на тестовые устройства iOS.