1

4つのNSTextFieldsにリンクされたカスタムNSFormatterがあります。テキストフィールドの値を手動で変更すると、すべてが正常に機能します。しかし、私がコンボボックスを通してそれを変えるとき。次のようなエラーが発生します。

-[__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];

}

4

1 に答える 1

0

問題は次のコード行です。

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

私の理解では、NSFormatterはstring valueテキストフィールドのを取得する必要があるため、テキストフィールドを整数として設定することはできません。このコード行

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

問題を解決します。

于 2012-04-01T00:38:53.520 に答える