0
我正在通過「iPhone開發:大書呆子牧場指南」。該項目是「隨機擁有」。我忠實地按照書中的代碼,它編譯OK,但我得到運行時此異常:NSInvalidArgumentException
**2010-07-04 11:43:48.511 RandomPosessions[14828:a0f] -[Posession initWithPosessionName:valueInDollars:serialNumber:]: unrecognized selector sent to instance 0x10010d1f0 2010-07-04 11:43:48.514 RandomPosessions[14828:a0f] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[Posession initWithPosessionName:valueInDollars:serialNumber:]: unrecognized selector sent to instance 0x10010d1f0' *** Call stack at first throw: ( 0 CoreFoundation 0x00007fff80b4bcc4 __exceptionPreprocess + 180 1 libobjc.A.dylib 0x00007fff8044b0f3 objc_exception_throw + 45 2 CoreFoundation 0x00007fff80ba5140 +[NSObject(NSObject) doesNotRecognizeSelector:] + 0 3 CoreFoundation 0x00007fff80b1dcdf ___forwarding___ + 751 4 CoreFoundation 0x00007fff80b19e28 _CF_forwarding_prep_0 + 232 5 RandomPosessions 0x00000001000016c2 +[Posession randomPosession] + 995 6 RandomPosessions 0x0000000100001196 main + 170 7 RandomPosessions 0x00000001000010e4 start + 52 ) terminate called after throwing an instance of 'NSException'**
這是我對「RandomPosession」的實現代碼:
#import "Posession.h"
@implementation Posession
@synthesize posessionName, serialNumber, valueInDollars, dateCreated;
-(NSString *) description {
NSString *descriptionString =
[[NSString alloc] initWithFormat:@"%@ (%@): Worth $%@, Recorded on %@",
posessionName,
serialNumber,
valueInDollars,
dateCreated];
return descriptionString;
}
+(id)randomPosession
{
static NSString *randomAdjectiveList[3] =
{
@"Fluffy",
@"Rusty",
@"Shiny"
};
static NSString *randomNounList[3] =
{
@"Bear",
@"Spork",
@"Mac"
};
NSString *randomName = [NSString stringWithFormat:@"%@ %@",
randomAdjectiveList[random() % 3],
randomNounList[random() % 3]];
int randomValue = random() % 100;
NSString *randomSerialNumber = [NSString stringWithFormat:@"%c%c%c%c%c",
'0' + random() % 10,
'A' + random() % 26,
'0' + random() % 10,
'A' + random() % 26,
'0' + random() % 10];
Posession *newPosession =
[[self alloc] initWithPosessionName:randomName
valueInDollars:randomValue
serialNumber:randomSerialNumber];
return newPosession;
}
-(id)init{
return [self initWithPosessionName:@"Posession"
valueInDollars:0
serialNumber:@""];
}
-(id)initWithPosessionName: (NSString *)pName
valuesInDollars:(int)value
serialNumber:(NSString *)sNumber{
[super init];
if(!self)
return nil;
[self setPosessionName:pName];
[self setSerialNumber:sNumber];
[self setValueInDollars:value];
dateCreated = [[NSDate alloc] init];
return self;
}
-(id)initWithPosessionName:(NSString *)pName {
return [self initWithPosessionName:pName
valuesInDollars:0
serialNumber:@""];
}
@end
我把我的頭髮拔出來! 我想感謝所有幫助 乾杯
不想成爲一自作聰明,但它是方法的定義,而不是聲明。 – 2010-07-04 08:44:06
謝謝約書亞。我知道它就像一個錯字一樣簡單 - 很好的發現!我會盡量注意警告,但如果我不知道他們指的是什麼,這無助於你。我定了錯別字,但現在我得到另一些警告,並在 吐假 - (的NSString *)的說明{ \t的NSString * descriptionString = \t \t [的NSString頁頭] initWithFormat:@「%@(%@ ):價值$%@,電話錄音%@」, \t \t \t \t posessionName, \t \t \t \t SERIALNUMBER, \t \t \t \t valueInDollars, \t \t dateCreated會]。 \t return descriptionString; \t } (對象超出範圍) 問題是我甚至沒有調用描述方法 – BernardH 2010-07-04 11:38:21
@Nikolai,當然,我的壞。編輯修復。 – 2010-07-04 18:01:27