2012-02-10 7 views
0

初期オブジェクトが作成され、ManagedObjectContextに挿入され、コンテキストが保存されます。このオブジェクトは、CoreDataスタックを管理するシングルトンクラスのプロパティとして設定されます。初期CoreDataオブジェクトのタイプが間違っています。

この元のオブジェクトは、別のクラスから参照された場合、間違った型(NSCFString)です。一方、オブジェクトがフェッチされている場合は、正しいクラスであり、正常に動作します。

NSArray *pdaSetupRecords = [results fetchedObjects]; 
//If this is the initial launch of the application, create 
//a PDASetup object and save the context, otherwise set 
//pdaSetup to the fetched instance. 
if ([pdaSetupRecords count] < 1) { 
    PDASetup *newPdaSetup = (PDASetup *) [NSEntityDescription insertNewObjectForEntityForName:@"PDASetup" inManagedObjectContext:managedObjectContext]; 
    [self saveContext]; 
    pdaSetup = newPdaSetup; 
    NSLog(@"SystemUtility - PDASetup object created and saved."); 
} else { 
    pdaSetup = [pdaSetupRecords objectAtIndex:0]; 
} 

ご覧のとおり、PDASetupオブジェクトは1つだけです。この問題は、PDASetupオブジェクトが作成されたときに発生します。私は、アプリケーションを実行し、PDASetupオブジェクトがフェッチされている場合、すべて正常です。

どのような考えですか?

答えて

0

は、あなたが書くことを意味しません:

pdaSetup = [newPdaSetup retain]; 

または

self.pdaSetup = newPdaSetup; //with a retained @property 

あなたのアプリはタイプがNSCFStringであるあなたを伝えるクラッシュしていますか?メモリアドレスが文字列で上書きされた可能性があります。

+0

pdaSetupは保持されます。 –

+0

あなたは正しいです、設定self.pdaSetupは、他の提案と同様に、問題を修正しました。私は自分自身を設定することが分かっていない*。 –

+0

私は推測から正しいときに私はそれが大好きです...あなたはメモリ管理のルールをもう一度読んで@propertiesを使用する必要があります。 self。*は変数のプロパティアクセサ/ミューテータを呼び出し、プロパティで 'retain'を使用する場合は変数を保持します。または、ARCを使用して開始します。 – bandejapaisa

関連する問題