App Delegateに最初に格納された管理対象オブジェクトエンティティの属性の名前を含む文字列の配列を(キー値コーディングを介して)作成すると、問題なくNSStringの配列を取得できます。その後、コードの同じエントリポイントから同じ呼び出しを行うと、コアデータコンテキストで何も変更されていなくても、同じコレクションがNULLオブジェクトの配列になります。
魅力のない回避策の1つは、文字列配列を毎回再作成することですが、舞台裏で何が起こっているのかを誰かが推測しているのではないかと思います。
// Return an array of strings with the names of attributes the Activity entity
- (NSArray *)activityAttributeNames {
#pragma mark ALWAYS REFRESH THE ENTITY NAMES?
//if (activityAttributeNames == nil) {
// Create an entity pointer for Activity
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Activity" inManagedObjectContext:managedObjectContext];
NSArray *entityAttributeArray = [[NSArray alloc] initWithArray:[[entity attributesByName] allValues]];
// Extract the names of the attributes with Key-Value Coding
activityAttributeNames = [entityAttributeArray valueForKeyPath:@"name"];
[entityAttributeArray release];
//}
return activityAttributeNames;
}