我在Ojective-C上编写了一个月并陷入了僵局。需要帮忙。 这里是故事:一个变量不是CFString
我有一个简单的类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的:在其上予连接到openNewDeck
和printDeckContent
方法的主要窗口
@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
和两个按钮。 问题是,应用程序下降与错误“EXC_BAD_ACCESS”,它发生在i
= 3,因为(当我使用调试器)[card[i] cardCV]
不是一个CFString。
我尝试用不同的字符串填充卡组,有时程序在显示[cards[i] cardCV]
的拳头圆上失败。 我真不明白发生了什么,但我想它在某种程度上与指针和内存分配规则的连接,因为没有简单类型的数据(position
例如)和showList
方法没有问题的正常工作,如果它从fill
方法调用。 请给我一只手!我疯了!该计划是如此简单,我真的很担心未来的编码问题...
我强烈建议使用NSMutableArray类,cards [j] look c-ish。 – 2011-04-19 09:26:00