#objective-c #ios #core-data
#objective-c #iOS #core-data
Вопрос:
Как мне инициализировать значения IVAR с помощью core data? Анализатор выдает ошибку «Получатель в выражении сообщения является неинициализированным значением»
Вот мой фрагмент кода для вызова объекта, который вызывает проблему в анализаторе :
CDCamera *camForAnnotation;
for(CDCamera *cams in fetchedObjects){
NSSet *annotSet = cams.annotation;
for (CDAnnotations *myannos in annotSet){
if (annotationIdentifer == [myannos objectID]) {
// found camera for annotation
camForAnnotation = cams;
bearing = myannos.bearing;
break;
}
}
}
double aov = [camForAnnotation.aov doubleValue] //Receiver in message expression is an uninitialized value
Вот моя CDCamera .h:
#import <CoreData/CoreData.h>
@class CDAnnotations;
@interface CDCamera : NSManagedObject
{
}
@property (nonatomic, retain) NSString * notes;
@property (nonatomic, retain) NSNumber * lfl;
@property (nonatomic, retain) NSNumber * ccd_h;
@property (nonatomic, retain) NSNumber * aov;
@property (nonatomic, retain) NSString * name;
@property (nonatomic, retain) NSNumber * monitor_d_size;
@property (nonatomic, retain) NSSet* annotation;
@end
@interface CDCamera (CoreDataGeneratedAccessors)
- (void)addAnnotationObject:(CDAnnotations *)value;
- (void)removeAnnotationObject:(CDAnnotations *)value;
- (void)addAnnotation:(NSSet *)value;
- (void)removeAnnotation:(NSSet *)value;
- (NSManagedObjectID *) getNSManagedObjectID;
@end
Вот мой .m
#import "CDCamera.h"
#import "CDAnnotations.h"
@implementation CDCamera
@dynamic notes;
@dynamic lfl;
@dynamic ccd_h;
@dynamic aov;
@dynamic name;
@dynamic monitor_d_size;
@dynamic annotation;
- (NSManagedObjectID *) getNSManagedObjectID{
return [self objectID];
}
@end
Спасибо за вашу помощь.
Ответ №1:
Вы не гарантированно получите значение в camForAnnotation, если внутри вашего цикла for ничего не совпадает.
Вы должны инициализировать значение nil при его объявлении и, возможно, обернуть свой последующий код в оператор if, чтобы сохранить выполнение чего-либо, если camForAnnotation по-прежнему равен нулю.
Ответ №2:
Фил,
Основные данные имеют методы, которые вызываются при извлечении объекта. Они используются для пользовательской инициализации. -awakeFromFetch
, -awakeFromInsert
и -awakeFromSnapshotEvents:
это методы, которые вы должны изучить.
Эндрю