簡體   English   中英

NSInvalidArgumentException

[英]NSInvalidArgumentException

我正在研究“ iPhone開發:大書呆子牧場指南”。 該項目是“隨機擁有”。 我忠實地遵循本書中的代碼,它可以編譯正常,但是在運行它時出現此異常:

**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

我把頭發拔成團! 我會很感激任何幫助

您需要更好地格式化輸入。

但是您的問題是您錯誤地定義了方法

-(id)initWithPosessionName: (NSString *)pName valuesInDollars:(int)valueserialNumber:(NSString *)sNumber

那應該是

-(id)initWithPosessionName: (NSString *)pName valueInDollars:(int)valueserialNumber:(NSString *)sNumber

您多了一個“ s”

我幾乎可以保證Xcode會為此警告您。 在Objective-C中,警告通常會導致諸如此類的運行時崩潰。 在放棄問題之前清理所有警告是一個好習慣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM