我正在運行,使我的NSMangedObjectClass配置文件im- /可導出。
我試試this way
如果我在NSArrays中寫入關係,導出工作正常,因爲NSSet沒有實現writeToFile
。NSManagedObject層次結構導入和導出
- (void) exportProfile:(Profile *)profile toPath:(NSString *)path{
//Profile
NSMutableDictionary *profileDict = [[self.selectedProfile dictionaryWithValuesForKeys:[[[self.selectedProfile entity] attributesByName] allKeys]] mutableCopy];
NSMutableArray *views = [NSMutableArray array];
//Views
for (View *view in selectedProfile.views) {
NSMutableDictionary *viewDict = [[view dictionaryWithValuesForKeys:[[[view entity] attributesByName] allKeys]] mutableCopy];
NSMutableArray *controls = [NSMutableArray array];
//Much more for-loops
[viewDict setObject:controls forKey:@"controls"];
[views addObject:viewDict];
}
[profileDict setObject:views forKey:@"views"];
if([profileDict writeToFile:[path stringByStandardizingPath] atomically:YES])
NSLog(@"Saved");
else
NSLog(@"Not saved");
[profileDict release];
}
但是,如果要導入另一側
- (Profile*) importProfileFromPath:(NSString *)path{
NSManagedObjectContext *context = [self.fetchedResultsController managedObjectContext];
Profile *newProfile = [NSEntityDescription insertNewObjectForEntityForName:@"Profile" inManagedObjectContext:context];
NSMutableDictionary *profileDict = [NSMutableDictionary dictionaryWithContentsOfFile:[path stringByStandardizingPath]];
[newProfile setValuesForKeysWithDictionary:profileDict];
}
我得到一個例外,這並不讓我困惑造成檔案需要一個NSSet中沒有的NSArray。
[__NSCFArray intersectsSet:]: unrecognized selector sent to instance 0x4e704c0 *** Terminating app due to uncaught exception 'NSInvalidArgumentException',
reason: '-[__NSCFArray intersectsSet:]: unrecognized selector sent to instance 0x4e704c0'
所以,我有兩個問題:
- 在一邊,我不能寫的NSSet到文件。
- 另一方面是我的Profile類期望NSSet。
所以我試圖創建NSSet中的一個類別,它實現將writeToFile
@implementation NSSet(Persistence)
- (BOOL)writeToFile:(NSString*)path atomically:(BOOL)flag{
NSMutableArray *temp = [NSMutableArray arrayWithCapacity:self.count];
for(id element in self)
[temp addObject:element];
return [temp writeToFile:path atomically:flag];
}
+ (id)setWithContentsOfFile:(NSString *)aPath{
return [NSSet setWithArray:[NSArray arrayWithContentsOfFile:aPath]];
}
@end
但我的功能不會被調用。
有沒有其他的方式來寫我的NSSet或告訴setValuesForKeysWithDictionary
關鍵「意見」是一個NSArray?
還是一種簡單的方法來im-/export ManagedObjects?
什麼是例外? – deanWombourne 2011-04-11 15:15:02
'NSSet'有一個實例方法' - (NSArray *)allObjects'和一個類方法'+(id)setWithArray:(NSArray *)array',可以幫助您。 – Joe 2011-04-11 15:22:29
'[__NSCFArray intersectsSet:]:無法識別的選擇發送到實例0x4e704c0 ***終止應用程序由於未捕獲的異常 'NSInvalidArgumentException',原因:「 - [__ NSCFArray intersectsSet:]:無法識別的選擇發送到實例0x4e704c0'' 像我表示Profile需要一個NSSet並且調用NSSet的函數而不是NSArray的方法 – Seega 2011-04-11 15:23:49