プロパティが価値を失う(長いが分かりやすい)

私のアプリでは、私は持っている:

car.h

@interface car : NSObject
{
  NSString *model;
  NSString *price;
 //others atributes

}
@property(nonatomic, retain) NSString *model;
@property(nonatomic, retain) NSString *price;
...

myshop.h

#import "car.h"
@interface myshop : UIViewController...
{
  car *mycar;
}
@property(nonatomic, retain) car *mycar;
...

myshop.m

...
-(void) viewDidLoad
{
   ...
   mycar = [[car alloc] init];
}

だから、私はテーブルビューから車を選択できるポップオーバーを示すメソッドを持っています。このpopoverコールバックは、delegateを使用してmycar.modelに値を代入し、上記のdoAメソッドを呼び出すmyshop.mのメソッドです。これはすべて正常に動作し、出力にmycar.modelの値が表示されます。

-(void) doA
{
   NSLog(@"car = %@", mycar.model );
   ...
}

しかし...今それは問題です:私はmyshopのビューにbuttomを持っています。このボタンを押すと、アクションは警告ビューを表示します(.hにデリゲートがあります)。このアラートが返されます:

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
   [self doA];
   ...
}

doAがmycar.modelをOutputに書き込もうとすると、プログラムがクラッシュします。 Xcodeの出力ビューにエラーは表示されません。コードでは、スレッド1:プログラム受信信号: EXEC_BAD_ACCESS が表示されます。

私はポップオーバー表示からたくさんの車を表示することができますが、ボタンを押すとAlertViewが閉じると、プログラムがクラッシュします。

テストのためだけに、別のクラスからデリゲートを介して実行される他のメソッドでは常に[self doA]と呼びますが、常にアプリケーションの癖があります。

どんな考えですか?何が間違っていますか?

コードの完成

ここにエラーはありますか? (これはcar.mの方法です)

- (void) setValues: (NSDictionary *) data  
{

    model = [data objectForKey:@"model"];
    price = [data objectForKey:@"price"];
    ...

私はコードのどこにでもプロパティ(モデル、価格、...)を初期化しません。

解決済み!

それはメモリ管理の問題でした!

私は変える

model = [data objectForKey:@"model"];

によって

model = [[NSString alloc] initWithFormat:@"%@", [data objectForKey:@"model"]];

私は今私が願っています!少なくともアプリはうまく動作するように見えます!

ありがとう、たくさんの友達!

2

2 答え

コードのどこかにメモリ管理のバグがあります。私はバグがどこにあるのか分かりません。あなたが投稿したコードにはほとんどありません(すべてが私にとって完璧です)。

より多くのコードを投稿しない限り、このコードを修正することはできません。

ARCを有効にすることを強くお勧めします。それはかなり新しいですが、今日は誰もがそれを使い始めなければならないほど古くなっています。

ARCをオンにするとバグが消えてしまう可能性が非常に高いです。

1
追加された
-fno-objc-arc コンパイラフラグを追加することによって、SBJsonのすべての *。m ファイルに対してARCを無効にすることができます: 追加された 著者 Abhi Beckert,
私はARCを有効にしようとしました...しかし、私はSBJsonを使用しています、そして、それはコンパイル時に多くのエラーを示します...
追加された 著者 Wagner Vieira,

投稿したコードは上手く見えますが、どこか他の場所でマイカーを過度にリリースしなければなりません。 「ゾンビ」の楽器でそれをプロファイリングすると、リリースされている場所がわかります。

0
追加された
申し訳ありません..ゾンビの意味は?
追加された 著者 Wagner Vieira,