2012-03-31 2 views
1

사용자 정의 NSFormatter은 4 NSTextFields에 링크되어 있습니다. 내 텍스트 필드의 값을 수동으로 변경하면 모든 것이 정상적으로 작동합니다. 하지만 콤보 상자를 통해 변경합니다. 나는 응용 프로그램이 지속적으로이 오류를 보내는 및 인스턴스가 항상 같은 (0xc0c3) 인 것으로 나타났습니다사용자 정의 포맷터 이상한 동작

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

:이처럼 보이는 오류가 발생합니다. 또한 NSTextFields이 내 맞춤 형식 지정자에 연결되어 있지 않은 경우에도 콤보 상자를 통해서도 제대로 작동합니다.

문제의 원인을 알고 계십니까?

미리 감사드립니다. 여기

는 일부 코드입니다 :

콤보 상자 조치 : - (무효) subnetMaskByNumberOfSubnetBits (ID) 보낸 사람 {

// ------- 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]; 

}

- (무효) 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]; 

} NSFormatter 내 텍스트 필드의 string value을 얻을 필요가 있기 때문에 내가 정수로 텍스트 필드를 설정할 수 없습니다, 내가 이해에서

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

:

+0

보통 이것은 실제로 숫자가있을 때 문자열이 있다고 생각하거나 문자열을 보유하는 데 사용 된 무언가가 해제 된 메모리 문제와 같이 어떤 종류의 객체가 관련되어 있는지에 대해 코드가 혼동된다는 것을 의미합니다 주소가 숫자에 대해 재사용되고 있습니다. 메시지와 주소가 항상 같은 경우 첫 번째 메시지와 주소가 더 자주 발생합니다. 예외 상황이 발생하면 스택 트레이스에서 흥미로운 점이 있습니까? –

답변

0

문제는이 코드 줄 것입니다. 이 코드 란

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

이 문제를 해결합니다.