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