2013-07-28 1 views
1

사용자가 금액을 입력하는보기가 있습니다. NSUserDefaults를 사용하여,이 양은 다음 뷰로 옮겨지며, 다음 뷰에서 수학적 계산을 수행하려고합니다. 이 다음보기에서 테이블에 데이터를 추가하는 데 사용되는 가변 배열이 있습니다. NSNumber *sum = [transactions valueForKeyPath:@"@sum.self"]; :NSNumber 및 NSUserDefaults를 사용하여 간단한 계산 수행

내가 배열 함께 객체를 추가하는 방법을 알아 냈 (모든 배열 객체는 함께 추가) -보기 2 =의 NSUserDefaults에서

라벨 : 내가 원하는 것입니다.

나는 수학을 시도했지만 운이 없다 : self.amountLeftInBudget.text = [[[NSUserDefaults standardUserDefaults] objectForKey:@"AmountToSpend"] - sum];. 이 오류가 발생했습니다 :이 아키텍처 및 플랫폼에 대해 일정한 크기가 아닌 인터페이스 'id'에 대한 포인터에 대한 산술.

누구든지 아이디어가 있습니까? 감사.

편집 : (경고보기 사용) 내 코드 두 문자열을 빼기 위해 노력에서

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex 
{ 
    //Only do the following actions if the user hit the done button 
    if (buttonIndex == 1) 
    { 
     NSString *amountSpentTextField = [alertView textFieldAtIndex:0].text; 

     if (!transactions) 
     { 
      transactions = [[NSMutableArray alloc]init]; 
     } 

     [transactions insertObject:amountSpentTextField atIndex:0]; 

     NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0]; 

     [self.mytableView insertRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic]; 

     //Add all the objects in the transactions array 
     NSDecimalNumber *sum = [transactions valueForKeyPath:@"@sum.self"]; 

     //Get the user defaults from the amountToSpend field 
     NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
     NSDecimalNumber *amountToSpend = [defaults objectForKey:@"AmountToSpend"]; 

     // Set the amountLeftInBudget label THE PROBLEM! the subtracting does not work 
     [self.amountLeftInBudget setText:[amountToSpend decimalNumberBySubtracting:sum]]; 

     //Set the amountSpent label 
     [self.amountSpent setText:[sum stringValue]]; 
    } 
} 

문제.

[[NSUserDefaults standardUserDefaults] objectForKey:@"AmountToSpend"] 

값이 표현의 무엇인가

답변

2

당신이 가진 -의 왼쪽 측면에, 당신의 발현을 검사? 객체에 대한 참조입니다. 이제 우입니다

sum 

값이 발현NSNumber는 일부 기준이다. 이 아키텍처 및 플랫폼에 대한 일정한 크기 아니다 'ID를'인터페이스의 포인터에 산술 :, 따라서 오류

<some reference to an object> - <some reference to an `NSNumber`> 

당신은 두 개의 참조 사이의 차이를 묻는 : 그래서 value의 것입니다 .

개체가 나타내는 숫자 값을 가져와 그 값에 대한 산술 연산을 수행 한 다음 숫자 결과를 문자열 표현으로 변환하여 text 속성에 할당해야합니다.

NSNumber에는 개체가 나타내는 숫자 값을 얻기위한 다양한 방법이 있습니다. 예 : doubleValue, intValue 등; 필요에 따라 적절한 것을 선택해야합니다.

HTH.

+0

답변 해 주셔서 감사합니다. 그것은 많은 의미가 있습니다. 사용자 기본값의 가치는 어떻게 얻을 수 있습니까? –

+0

@ShaanSingh CRD가 마지막 단락에서 대답했습니다.'NSNumber'에서 숫자 값을 가져 오는 방법을 모르면 잠시 후 다시 한 번 언어의 기본 사항을 검토하는 것이 좋습니다. – bbum

+0

NSUserDefaults에도 사용할 수 있습니까? –

0

UILabel에 텍스트를 설정하면 NSString을 지정해야합니다. 그래서 문제가 작동하지 않습니다 당신이 플래그 라인 ...

// Set the amountLeftInBudget label THE PROBLEM! the subtracting does not work 
[self.amountLeftInBudget setText:[amountToSpend decimalNumberBySubtracting:sum]]; 

... 당신이 NSDecimalNumber을 UILabel의 제공하고 있기 때문이다. NSDecimalNumber를 먼저 문자열로 변환하십시오.

[self.amountLeftInBudget setText:[[amountToSpend decimalNumberBySubtracting:sum] stringValue]]; 
+0

신호 SIGBART 오류가 발생합니다. –

+0

해결책을 시도했지만 응용 프로그램이 충돌합니다. 문제는 NSUserDefaults 수 있습니다. 어떻게 생각해? –

+0

내 대답은 amountToSpend가 앞의 줄에있는 NSUserDefaults에서 코드로 검색 한 유효한 NSDecimalNumber 개체라고 가정합니다. 중단 점을 설정하고 디버거를 사용하여 amountToSpend를 검사하고 NSDecimalNumber인지 확인하여이 가정을 확인할 수 있습니다. NSUecDefaults에 NSDecimalNumber를 올바르게 쓰지 못할 수도 있습니다. 제쳐두고 NSUserDefaults를 사용하여 이와 같이 변수를 전달하는 것은 약간 이상합니다. amountToSpend를 인스턴스 변수로 만드는 것이 더 쉬울 수도 있습니다. – spinacher