0

プロジェクトに3つのファイルがあると仮定します。

  1. データモデルファイル、コアデータの処理と情報の取得
  2. viewController 1
  3. viewController 2

モデルファイルでは、次の結果が得られます。

- (NSArray *) getColonyData
{
NSManagedObjectContext *cxt = [self managedObjectContext];
NSEntityDescription *colonyDesc = [NSEntityDescription entityForName:@"Colony" inManagedObjectContext:cxt];
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:colonyDesc];

NSError *error;
NSArray *colonyResults = [cxt executeFetchRequest:request error:&error];

return colonyResults;
}

最初のviewControllerのviewDidLoadセクションでコードのこの部分を実行すると、適切な結果が得られます。

  NSArray *colonyResults = [model getColonyData];
    if (colonyResults != nil)
    {
        colonyName.text = [[colonyResults objectAtIndex:0] valueForKey:@"name"];
    }
    else
    {
        colonyName.text = @"nothing setup yet";
    }

次に、まったく同じコードを実行するときに、セグエを介して2番目のviewControllerに移動します(もちろん、異なるUI要素を更新します)。しかし、今回の結果はnilです。私はここで何が間違っているのですか?最初に結果を手動でリリースする必要がありますか?他のエラーは表示されません。ありがとう。

4

1 に答える 1

0

コメントで示唆されているように:

experimentModel *model;何も割り当てません。変数が存在することを宣言するだけです。どこかで、最初のコントローラーの実際のオブジェクトにモデルを設定する必要があります(おそらく、2番目のコントローラーでは設定しません)。

nilオブジェクトにメッセージを送信することは、期待した結果が得られない一般的な方法です。:)

于 2012-09-12T14:32:50.760 に答える