我在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