Я также рекомендовал бы экспериментировать с регулярными выражениями с помощью "Экспресса" - это - утилита великое (и свободный) утилита для regex редактирование и тестирование.
Один из его позитивных аспектов - то, что его UI представляет большую regex функциональность, что люди unexprienced с regex не могли бы быть знакомы с, способом что для них будет легко изучить эти новые понятия.
, Например, при создании regex использование UI и выбор "*", у Вас есть способность проверить флажок "As few as possible" и видеть получающийся regex, а также протестировать его поведение, даже если Вы были незнакомы с нежадными выражениями прежде.
Доступный для скачивания на их сайте: http://www.ultrapico.com/Expresso.htm
загрузка Экспресса: http://www.ultrapico.com/ExpressoDownload.htm
Когда вы определяете связь в модели данных, набор определяется в заголовке содержащего объекта. Просто добавьте или удалите элементы из набора, используя обычные методы NSMutableSet.
Чтобы добавить новый управляемый объект, сделайте что-то вроде:
Task* newTask = [NSEntityDescription insertNewObjectForEntityForName:@"Task" inManagedObjectContext:self.managedObjectContext];
Если вы возьмете образец Location от Apple и начнете работать оттуда, вы разберетесь с ним, хотя он не содержит отношений. Чтобы все это работало, просто измените свою модель данных на то, чем она должна быть, и не думайте об этом как о взаимосвязи, просто думайте об этом как о «A имеет NSMutableSet of B». Поскольку вы определили обратные отношения, как рекомендовано в документации, вам не нужно думать о том, что B имеет от A, просто начните думать в терминах B, когда этот объект имеет для вас значение.
Допустим, у вас есть объект Airport, который имеет объект Board (и представьте, что вы устанавливаете исходную точку и пункт назначения в Flight с помощью переменной routingArray
,
Есть несколько вариантов:
1. Вы можете использовать add
в NSManagedObject:
NSManagedObject *flightBoard = [NSEntityDescription insertNewObjectForEntityForName:@"FlightDepartureBoard" inManagedObjectContext:self.managedObjectContext];
NSManagedObject *details = [NSEntityDescription insertNewObjectForEntityForName:@"Flight_Details" inManagedObjectContext:self.managedObjectContext];
[flightBoard addCurrent_flightsObject:details];
Хотя вы получите предупреждение компилятора, если вы не определите аксессоры в категории:
@interface NSManagedObject (Current_flightsAccessors)
- (void)addCurrent_flightsObject:(NSManagedObject *)value;
- (void)removeCurrent_flightsObject:(NSManagedObject *)value;
- (void)addCurrent_flights:(NSSet *)value;
- (void)removeCurrent_flights:(NSSet *)value;
@end
2. Подкласс. Вы можете сгенерировать файлы классов из вашей модели, которые будут включать аксессоры для отношений ко многим:
FlightDepartureBoard.h:
#import <CoreData/CoreData.h>
@class Flight_Details;
@interface FlightDepartureBoard : NSManagedObject
{
}
@property (nonatomic, retain) NSString * name;
@property (nonatomic, retain) NSString * from_airport;
@property (nonatomic, retain) NSString * to_airport;
@interface FlightDepartureBoard (CoreDataGeneratedAccessors)
- (void)addCurrent_flightsObject:(Flight_Details *)value;
- (void)removeCurrent_flightsObject:(Flight_Details *)value;
- (void)addCurrent_flights:(NSSet *)value;
- (void)removeCurrent_flights:(NSSet *)value;
@end
FlightDepartureBoard.m:
#import "FlightDepartureBoard.h"
#import "Flight_Details.h"
@implementation FlightDepartureBoard
@dynamic name;
@dynamic from_airport;
@dynamic to_airport;
@dynamic current_flights;
@end
3. Вы можете получить изменяемый набор и изменить его с помощью mutableSetValueForKey :. Например:
NSManagedObject *flightBoard = [NSEntityDescription insertNewObjectForEntityForName:@"FlightDepartureBoard" inManagedObjectContext:self.managedObjectContext];
NSManagedObject *details = [NSEntityDescription insertNewObjectForEntityForName:@"Flight_Details" inManagedObjectContext:self.managedObjectContext];
NSMutableSet *flights = [flightBoard mutableSetValueForKey:@"current_flights"];
[flights addObject:details];
Дополнительные сведения см. В разделе Методы доступа к управляемым объектам .