NSInvalidArgumentException - PullRequest
       1

NSInvalidArgumentException

0 голосов
/ 04 июля 2010

Я работаю через "Разработка 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

Я выдергиваю волосы комками!Буду признателен за любую помощь Приветствия

1 Ответ

1 голос
/ 04 июля 2010

Вам нужно лучше отформатировать ввод ....

Но ваша проблема в том, что вы неправильно определили метод

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

, который должен быть

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

У вас было лишнее 's'

Я могу почти гарантировать, что XCode предупреждал вас об этом.В Objective-C предупреждения обычно приводят к сбоям во время выполнения, таким как этот.Хорошей привычкой является очистка всех ваших предупреждений перед тем, как отказаться от проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...