0

配列を初期化してみました:

.h ファイル内

    @property (nonatomic, retain) NSArray *accounts;

.m ファイル内:

    @synthesize accounts;

    - (void)viewDidLoad
    {
       [super viewDidLoad];
       NSArray *arrList = [acAccountStore accountsWithAccountType:accountType];  
       // This returns array
       self.accounts = [NSArray arrayWithArray:arrList]; // I tried debug after 
       // this and it gives me data in debugger.  
       // Note array List have 3 data in it.   
       }

ボタンをクリックすると、メソッドが呼び出されます。

- (IBAction) ButtonClicked :(id) sender {
      NSLog(@" data : %@",[self.accounts objectAtIndex:0]); // Breaks at this point. 
      //  When i tried with debug it gives me (no Objective-C description available)
}

配列の初期化は正しいですか、またはコードが正しくない場合はお知らせください。

主な懸念事項は、viewDidLoad でデバッグを行うときに、self.accounts に適切な値が表示されることです。しかし、クリックイベントを実行した後、空になり、EXEC_BAD_ACCESS エラーがスローされます。

事前に助けてくれてありがとう

4

2 に答える 2

0

うーん元気そうです。次に、いくつかの質問があります。

self.accounts = [NSArray arrayWithArray:arrList]; ボタンが押される前にアレイがセットアップされていると思いますが、どこに電話をかけていますか?

アークが変数をクリアする必要があるという本当の理由はありません。あなたはそれへの強い言及を設定しましたか、それとも弱いものを設定しましたか?self.変数で使用している場合は、次のようにする必要があります。

@property (nonatomic, strong) NSArray *accounts;

または.hファイルにあるものと同様に

@synthesize accounts;

.mファイル内。

weak代わりに持っている場合strong、ARCはおそらくメモリをクリアするかもしれませんが、それでもそうすべきではありません。

于 2012-12-23T00:41:35.770 に答える
0

アップデート:

アカウント ストアのプロパティも作成します。私は最近この正確な問題を抱えていましたが、これで修正されました。

@property (nonatomic, strong) ACAccountStore *accountStore;

元の回答

を使用しているためARC、プロパティ宣言をから変更する必要があります

@property (nonatomic, retain) NSArray *accounts;

に:

@property (nonatomic, strong) NSArray *accounts;

最新の LLVM コンパイラでは、プロパティを合成する必要もありません。だから、あなたは削除することができます@synthesize accounts

常に防御コーディングも使用する必要があるため、- buttonClicked:メソッドでは次のことを行う必要があります。

- (IBAction)buttonClicked:(id)sender {
    if (self.accounts) {
          NSLog(@"data: %@", [self.accounts objectAtIndex:0]);
    }
}

これにより、配列へのポインターが有効であることが確認されます。

次のようにして、読み取りを試みる前に、配列内の項目が存在することを確認することもできます。

- (IBAction)buttonClicked:(id)sender {
    if (self.accounts.count > 0)
          NSLog(@"data: %@", [self.accounts objectAtIndex:0]);
    }
 }
于 2012-12-23T02:49:38.287 に答える