Amrmsmb
Amrmsmb

Reputation: 1

implicit conversion NSNumber* to int

i have two view controllers VC1 and VC2. VC1 has a textField and button. the VC2 has a property of type NSNumber* .

I am trying to pass the value in the textfield in VC1 to VC2, so I did the following in VC1

- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([segue.identifier isEqualToString:SEGUE_IFENTIFIER_TO_DETAILS_VIEW_CONTROLLER]) {

    ((DetailsViewController *)  
    segue.destinationViewController).receivedData =
    self.textFieldValueToDispatch.text.intValue;
}

but I receive an error saying : implicit conversion on int_nullable

how to solve it

Upvotes: 1

Views: 464

Answers (2)

junaidsidhu
junaidsidhu

Reputation: 3580

Converting NSString to Int

int value = [@"1234" integerValue]; // Int Type

Converting Int to NSNumber

// Using NSNumber methods
NSNumber * number = [NSNumber numberWithInt:1234]; 

// Using NSNumber literals
NSNumber * number = @(1234);

Converting String to NSNumber

// Using NSNumber methods
NSNumber * number = [NSNumber numberWithInt:[@"" integerValue]];

// Using NSNumber literals
NSNumber * number = @([@"" integerValue]);

Your Solution

((DetailsViewController *) segue.destinationViewController).receivedData =
@([self.textFieldValueToDispatch.text integerValue]);

Upvotes: 0

vadian
vadian

Reputation: 285079

  • NSNumber is an object
  • int / NSInteger is a primitive scalar type

Both types are not interchangeable.

The easiest solution is to create an NSNumber object from NSIntegerwith ObjC literal

((DetailsViewController *)segue.destinationViewController).receivedData =
                         @(self.textFieldValueToDispatch.text.integerValue);

@(123) is the same as [NSNumber numberWithInteger:123]

Upvotes: 2

Related Questions