У меня есть свойство Core Data, которое я пытаюсь установить во время выполнения, со значением, полученным из другого свойства.Однако любопытно, что созданный мной пользовательский метод доступа никогда даже не вызывается.
Свойство seasonNameVisible
вызывается только из предиката с терминами из поля поиска, как показано здесь:
// Add our search predicates
for (NSString *term in searchTerms) {
NSPredicate *searchTermPredicate = [NSPredicate predicateWithFormat:@"(episodeName contains[cd] %@) OR (fromSeason.seasonNameVisible contains[cd] %@) OR (fromSeason.fromSeries.seriesName contains[cd] %@)", term, term, term];
[subPredicates addObject:searchTermPredicate];
}
Если я изменю это свойство на seasonName
, эта часть предиката вернет результат просто отлично, поэтому я не подозреваю предикат или любой другой код поиска.
Мой планэто получить seasonNameVisible
NSString из seasonName
во время выполнения.Итак, я изменил подкласс Season
NSManagedObject, чтобы переопределить метод доступа и установщик, используя примитивные методы доступа.Но, насколько я могу судить, мой метод доступа никогда не вызывается.
Вот заголовок / интерфейс:
//
// Season.h
//
#import <Foundation/Foundation.h>
#import <CoreData/CoreData.h>
@class Episode, Series;
@interface Season : NSManagedObject
@property (nonatomic, retain) NSNumber * seasonIndex;
@property (nonatomic, retain) NSString * seasonName;
@property (nonatomic, retain) NSString * seasonNameVisible;
@property (nonatomic, retain) NSSet *episodes;
@property (nonatomic, retain) Series *fromSeries;
@property (nonatomic, retain) NSString * primitiveSeasonName;
@property (nonatomic, retain) NSString * primitiveSeasonNameVisible;
@end
@interface Season (CoreDataGeneratedAccessors)
- (void)addEpisodesObject:(Episode *)value;
- (void)removeEpisodesObject:(Episode *)value;
- (void)addEpisodes:(NSSet *)values;
- (void)removeEpisodes:(NSSet *)values;
@end
// my additions
@interface Season (PrimitiveAccessors)
- (NSString *)primitiveSeasonName;
- (NSString *)primitiveSeasonNameVisible;
@end
... и реализация:
//
// Season.m
//
#import "Season.h"
#import "Episode.h"
#import "Series.h"
@implementation Season
@dynamic seasonIndex;
@dynamic seasonName;
@dynamic seasonNameVisible;
@dynamic episodes;
@dynamic fromSeries;
// my additions
@dynamic primitiveSeasonName;
@dynamic primitiveSeasonNameVisible;
- (NSString *)seasonNameVisible
{
NSString *visible;
[self willAccessValueForKey:@"seasonNameVisible"];
visible = [self primitiveValueForKey:@"seasonNameVisible"];
[self didAccessValueForKey:@"seasonNameVisible"];
if (visible != nil) {
return visible;
} else {
[self willAccessValueForKey:@"seasonName"];
visible = [[self primitiveValueForKey:@"seasonName"] substringFromIndex:2];
[self didAccessValueForKey:@"seasonName"];
[self setSeasonNameVisible:visible];
return visible;
}
}
- (void)setSeasonNameVisible:(NSString *)seasonNameVisible
{
[self willChangeValueForKey:@"seasonNameVisible"];
[self setPrimitiveValue:seasonNameVisible forKey:@"seasonNameVisible"];
[self didChangeValueForKey:@"seasonNameVisible"];
}
@end
Я прочитал документы Apple и искал справку о пользовательских методах доступа в StackOverflow, и я думаю У меня правильный код (это первый раз, когда я пытался использовать примитивные средства доступаили переопределить метод NSManagedObject, так что я немного оторвался от своей обычной глубины), но даже когда я ставлю на него точку останова, она никогда не вызывается.