私は Ojective-C で 1 か月だけコーディングしていて、デッドロックに陥っています。助けが必要。これが話です:
私は単純なクラスLXPPlayingCardを持っています:
#import <Cocoa/Cocoa.h> @interface LXPPlayingCard : NSObject { @private NSString* cardCV; @private int position; } @property (readwrite, assign) NSString* cardCV; @property (readwrite,assign) int position; @end @implementation LXPPlayingCard @synthesize cardCV; @synthesize position; @end
また、より複雑なクラス LXPDeck はほとんどありません。
#import <Cocoa/Cocoa.h> #import "LXPPlayingCard.h" @interface LXPDeck : NSObject { LXPPlayingCard* cards[100]; int deckCapacity; } -(void) fill:(NSString *) cardlist; -(void) showList; -(int) deckCapacity; @end #import "LXPDeck.h" #import "LXPPlayingCard.h" @implementation LXPDeck -(void) fill:(NSString *) cardlist { int l,i,j; l=[cardlist length]; j=0; for (i=0;i<l;i+=2) { cards[j]=[[LXPPlayingCard alloc] init] ; [cards[j] setCardCV:[cardlist substringWithRange:NSMakeRange(i,2)]]; [cards[j] setPosition:j+1]; NSLog(@"%@",[cards[j] cardCV]); j++; } deckCapacity=j; } -(int) deckCapacity { return deckCapacity;} -(void) showList { NSLog(@"deck capacity:%d",deckCapacity); NSString * temp; temp=[[NSString alloc] init]; for (int i=0;i<deckCapacity;i++) { NSLog(@"card[%d]=%d, adress:%p",i,[cards[i] position],cards[i]); temp=[cards[i] cardCV]; NSLog(@"%@",temp); } } @end
カードの配列に文字列から名前を入力し (setCardCV)、デッキの内容を出力します (showList)。さらに、クラス AppController を作成します。
@interface LXPAppController : NSObject {
}
-(IBAction) openNewDeck:(NSButton * )sender;
-(IBAction) printDeckContent:(NSButton *)sender ;
@end
#import "AppController.h"
#import "LXPDeck.h"
@implementation LXPAppController
BOOL deckOpened=FALSE;
LXPDeck* workDeck;
-(IBAction) openNewDeck:(NSButton *) sender{
if (!deckOpened) {
NSLog(@"Opening new deck...");
workDeck=[LXPDeck alloc];
[workDeck fill:@"pacataca"];
}
deckOpened=TRUE;
}
-(IBAction) printDeckContent:(NSButton *) sender {
if (deckOpened) {
NSLog(@"Printing deck content...");
[workDeck showList];
}
}
@end
私がリンクしたメインウィンドウの2つのボタンopenNewDeck
とprintDeckContent
メソッド。問題は、アプリケーションがエラー「EXC_BAD_ACCESS」で落ち、(デバッガーを使用すると) CFString ではないi
ため、=3で発生することです。[card[i] cardCV]
デッキを埋めるためにさまざまな文字列を試してみましたが、プログラムが[cards[i] cardCV]
. 何が起こるかはよくわかりませんが、単純なタイプのデータ(position
たとえば)には問題がなく、showList
メソッドから呼び出すとメソッドが正常に動作するため、ポインターとメモリ割り当てルールに何らかの関係があると思いますfill
。手を貸してください!私は気が狂うよ!プログラムはとても単純なので、将来のコーディングの問題が心配です...