Пользовательский форматер странное поведение - PullRequest
1 голос
/ 31 марта 2012

У меня есть пользовательский NSFormatter , связанный с 4 NSTextFields .Когда я вручную изменяю значения моих текстовых полей, все работает нормально.Но когда я изменяю это через поле со списком.Я получаю сообщение об ошибке, похожее на это:

-[__NSCFNumber length]: unrecognized selector sent to instance 0xc0c3

Я заметил, что приложение постоянно отправляет эту ошибку и что экземпляр всегда одинаков ( 0xc0c3 ).Кроме того, когда мои NSTextFields не связаны с моим пользовательским форматером , все работает хорошо, даже через поле со списком.

Ребята, вы знаете, что может бытьИсточник проблемы?

Заранее спасибо!

Вот код:

Действие поля со списком: - (void) subnetMaskByNumberOfSubnetBits: (id) sender {

// ------- Sets the subnet mask when the user selects the number of bits

NSNumberFormatter *stringToNumber = [[NSNumberFormatter alloc] init];//TURN A STRING INTO A NUMBER
NSNumber *selectedAmountOfBits = [[NSNumber alloc] init];//CONTAINS THE SELECTED NUMBER OF BITS

selectedAmountOfBits = [stringToNumber numberFromString:[sender objectValueOfSelectedItem]];

[self changeSubnetMaskUsingNumberOfMaskBits:selectedAmountOfBits];

//RELEASE
[stringToNumber release];

}

- (void) changeSubnetMaskUsingNumberOfMaskBits: (NSNumber *) numberOfMaskBitsSelected {

// --------- Change the subnet mask based on the number of bits


NSInteger numberOfFullOctets;
NSInteger valueOfLastOctet;
NSInteger octetCounter;
NSMutableDictionary *subnetMaskFields = [[NSMutableDictionary alloc] init];



//Contains keys to all the outlets
[subnetMaskFields setObject:subnetMaskOctet1 forKey:@"subnetMaskField1"];
[subnetMaskFields setObject:subnetMaskOctet2 forKey:@"subnetMaskField2"];
[subnetMaskFields setObject:subnetMaskOctet3 forKey:@"subnetMaskField3"];
[subnetMaskFields setObject:subnetMaskOctet4 forKey:@"subnetMaskField4"];


//NUMBER OF FULL OCTETS AND VALUE OF LAST OCTET
numberOfFullOctets = [numberOfMaskBitsSelected intValue]/8;

valueOfLastOctet = 256 - pow(2, 8 - ([numberOfMaskBitsSelected intValue] - (8 * ([numberOfMaskBitsSelected intValue]/8)))); //Big complicated formula


//-------Setting the fields------//

//SETTING THE FIELDS OF FULL OCTETS
for (octetCounter = 1; octetCounter <= numberOfFullOctets; octetCounter++) { 
    [[subnetMaskFields objectForKey:[NSString stringWithFormat:@"subnetMaskField%i", octetCounter]] setStringValue:@"255"];
}

//SETTING THE FIELD OF THE INCOMPLETE OCTET
[[subnetMaskFields objectForKey:[NSString stringWithFormat:@"subnetMaskField%i", octetCounter]] setIntegerValue:valueOfLastOctet];


//FILLING THE ZER0S
while (octetCounter < 4) {

    octetCounter++;
    [[subnetMaskFields objectForKey:[NSString stringWithFormat:@"subnetMaskField%i", octetCounter]] setStringValue:@"0"];


}

//RELEASE
[subnetMaskFields release];

}

1 Ответ

0 голосов
/ 01 апреля 2012

Проблема в этой строке кода:

[[subnetMaskFields objectForKey:[NSString stringWithFormat:@"subnetMaskField%i", octetCounter]] setIntegerValue:valueOfLastOctet];

Из того, что я понимаю, поскольку NSFormatter должен получить string value моего текстового поля, я не могу установить текстовое поле как целое число. Эта строка кода

[[subnetMaskFields objectForKey:[NSString stringWithFormat:@"subnetMaskField%i", octetCounter]] setStringValue:[NSString stringWithFormat:@"%ld", valueOfLastOctet]]; 

решает проблему.

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