テストMac OSアプリケーションからiPhoneアプリケーションにコアデータコードを移植しようとしています。私は、フェッチのためのコードのすべてを管理するためのヘルパーメソッドを設定、およびすべてのものは、Mac OS上で素晴らしい作品が、私はiPhone上でこのエラーが表示されます。ここでは「デッドシンプルフェッチ要求時に_Unwind_Resume」が呼び出されました
Detected an attempt to call a symbol in system libraries that is not present on the iPhone:
_Unwind_Resume called from function -[NSSQLAdapter _newSelectStatementWithFetchRequest:ignoreInheritance:] in image CoreData.
は、ヘルパーメソッドを呼び出すコードであります:
// get authors and title THIS WORKS
NSArray *bookInfoFetchResults = [self getEntitiesByName:kOC_CD_ObjectKey_bookInfo
usingPredicateValue:@"contentRoot.bookInfo.bookAuthors > \"\""
withSubstitutionVariables:[NSDictionary dictionaryWithObjectsAndKeys:nil]
inModel:model
andContext:context
sortByAttribute:nil];
int thisResult = 0;
int lastResult = [bookInfoFetchResults count];
for (thisResult = 0; thisResult < lastResult; thisResult++) {
NSManagedObject *currentResult = [bookInfoFetchResults objectAtIndex:thisResult];
NSLog(@"bookAuthors: %@", [currentResult valueForKey:kOC_CD_ObjectAttribute_bookAuthors]);
NSLog(@"bookTitle: %@", [currentResult valueForKey:kOC_CD_ObjectAttribute_bookTitle]);
}
// get chapters THIS DOES NOT WORK
NSArray *chapterFetchResults = [self getEntitiesByName:kOC_CD_ObjectKey_chapter
usingPredicateValue:@"ALL contentRoot.chapters.title > \"\""
withSubstitutionVariables:[NSDictionary dictionaryWithObjectsAndKeys:nil]
inModel:model
andContext:context
sortByAttribute:kOC_CD_ObjectAttribute_key];
int thisChapterResult = 0;
int lastChapterResult = [chapterFetchResults count];
for (thisChapterResult = 0; thisChapterResult < lastChapterResult; thisChapterResult++) {
NSManagedObject *currentChapterResult = [chapterFetchResults objectAtIndex:thisChapterResult];
NSLog(@"Chapter %@: %@", [currentChapterResult valueForKey:kOC_CD_ObjectAttribute_number], [currentChapterResult valueForKey:kOC_CD_ObjectAttribute_title]);
}
(つまり、結果として得られるエラーを変更していない除去が、エラーチェックを取り除い)ヘルパーメソッド:
- (NSArray *) getEntitiesByName:(NSString *)entityName usingPredicateValue:(NSString *)predicateValue withSubstitutionVariables:(NSDictionary *)variablesDict inModel:(NSManagedObjectModel *)aModel andContext:(NSManagedObjectContext *)aContext sortByAttribute:(NSString *)sortingAttribute; {
NSArray *fetchResults;
NSString *fetchRequestTemplateName = [NSString stringWithFormat:@"get_%@", entityName];
NSFetchRequest *fetchRequestTemplate = [[NSFetchRequest alloc] init];
NSEntityDescription *targetEntityDescription;
targetEntityDescription = [[aModel entitiesByName] objectForKey:entityName];
[fetchRequestTemplate setEntity:targetEntityDescription];
// need to find a way to catch an error here in case we give something that isn't right
// NSInvalidArgumentException: Unable to parse the format string "MQaynH5bXs"
NSPredicate *predicateTemplate = [NSPredicate predicateWithFormat:predicateValue];
[fetchRequestTemplate setPredicate:predicateTemplate];
[aModel setFetchRequestTemplate:fetchRequestTemplate forName:fetchRequestTemplateName];
[fetchRequestTemplate release];
if (variablesDict == nil) {
variablesDict = [NSDictionary dictionaryWithObjectsAndKeys:nil];
[variablesDict retain];
}
NSFetchRequest *fetchRequestToExecute = [aModel fetchRequestFromTemplateWithName:fetchRequestTemplateName substitutionVariables:variablesDict];
NSError *fetchError;
fetchResults = [aContext executeFetchRequest:fetchRequestToExecute error:&fetchError];
if ((sortingAttribute != nil) && (fetchResults != nil)) {
NSSortDescriptor *attributeSorter = [[NSSortDescriptor alloc] initWithKey:sortingAttribute ascending:YES];
fetchResults = [fetchResults sortedArrayUsingDescriptors:[NSArray arrayWithObject:attributeSorter]];
[attributeSorter release];
}
return fetchResults;
}
故障のポイントヘルパーメソッドである:
fetchResults = [aContext executeFetchRequest:fetchRequestToExecute error:&fetchError];
ヘルパーメソッドからコードを外すこともできません。
それが役立つかどうかは分かりませんが、私のヘルパーメソッドで私のエラー処理コードを除去した後、私はこれを取得:
2010-11-30 16:31:30.633 OC Flash Card Core 2[19306:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Unsupported predicate (null)'
*** Call stack at first throw:
(
0 CoreFoundation 0x02655b99 __exceptionPreprocess + 185
1 libobjc.A.dylib 0x027a540e objc_exception_throw + 47
2 CoreData 0x02381e86 -[NSSQLGenerator generateSQLStatementForFetchRequest:ignoreInheritance:countOnly:] + 1254
3 CoreData 0x023816f0 -[NSSQLAdapter _newSelectStatementWithFetchRequest:ignoreInheritance:] + 480
4 CoreData 0x02381501 -[NSSQLAdapter newSelectStatementWithFetchRequest:] + 49
5 CoreData 0x023813ae -[NSSQLCore newRowsForFetchPlan:] + 430
6 CoreData 0x02380b09 -[NSSQLCore objectsForFetchRequest:inContext:] + 297
7 CoreData 0x023806fe -[NSSQLCore executeRequest:withContext:error:] + 206
8 CoreData 0x0242e91c -[NSPersistentStoreCoordinator executeRequest:withContext:error:] + 1084
9 CoreData 0x0237d897 -[NSManagedObjectContext executeFetchRequest:error:] + 359
10 OC Flash Card Core 2 0x0000360e -[OCContentImporterObj getEntitiesByName:usingPredicateValue:withSubstitutionVariables:inModel:andContext:sortByAttribute:] + 481
11 OC Flash Card Core 2 0x00002af7 -[OCContentImporterObj testCoreDataIntegrity] + 188
12 OC Flash Card Core 2 0x00002864 -[OCContentImporterObj importContent] + 88
13 OC Flash Card Core 2 0x0000252b -[AppDelegate_iPhone application:didFinishLaunchingWithOptions:] + 91
14 UIKit 0x002b4f27 -[UIApplication _callInitializationDelegatesForURL:payload:suspended:] + 1163
15 UIKit 0x002b73b0 -[UIApplication _runWithURL:payload:launchOrientation:statusBarStyle:statusBarHidden:] + 346
16 UIKit 0x002c13ec -[UIApplication handleEvent:withNewEvent:] + 1958
17 UIKit 0x002b9b3c -[UIApplication sendEvent:] + 71
18 UIKit 0x002be9bf _UIApplicationHandleEvent + 7672
19 GraphicsServices 0x02f35822 PurpleEventCallback + 1550
20 CoreFoundation 0x02636ff4 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 52
21 CoreFoundation 0x02597807 __CFRunLoopDoSource1 + 215
22 CoreFoundation 0x02594a93 __CFRunLoopRun + 979
23 CoreFoundation 0x02594350 CFRunLoopRunSpecific + 208
24 CoreFoundation 0x02594271 CFRunLoopRunInMode + 97
25 UIKit 0x002b6c6d -[UIApplication _run] + 625
26 UIKit 0x002c2af2 UIApplicationMain + 1160
27 OC Flash Card Core 2 0x00001ce0 main + 102
28 OC Flash Card Core 2 0x00001c71 start + 53
)
terminate called after throwing an instance of 'NSException'
しかし、再び、これはすべてに完璧に働いていましたマックOS。私は_Unwind_Resume
を検索しようとしましたが、それはApple側のバグであると思われます。少なくとも12ダースの違う方法とそれを解決する十数の方法があります。私が考えることができる唯一の違いは、CDストアには1つのインスタンスが(意図的に)存在し、問題の1つは多くのことを持つことができることです。何か案は?
データモデルと述語は表示されませんが、ALLとANYは異なるテストです。 ALLはtrueを返します。評価されるすべての属性はtrueと評価されます。 ANYはtrueを返します。評価される属性の1つ以上がtrueと評価されます。よくある間違いは、複数の関係を横断するためにALLを試してみることです。なぜそれが失敗したのかを知りたければ、エンティティマップと述語で新しい質問を投稿したいかもしれません。 – TechZen