0
votes

Why does it have a "Return makes pointer from integer without a cast" warning?

I have a "Person" object that contains an NSString and an int.

-(id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row
{
Person *thePerson = [theList objectAtIndex:row];
if (tableColumn == nameTableColumn)
    {
        return thePerson.theName;
    }
    else if (tableColumn == ageTableColumn)
    {
        return thePerson.theAge;
    }
    else
         return nil;
}

For some kind of reason, the Age instance variable gets a warning about pointers. It's weird and I want to know why.

2

2 Answers

1
votes

id is the type for a generic object, and is actually a pointer (even though you don't have to declare it with the '*'). int isn't an object, and so you get the warning. If you want to use this method, you could try wrapping it in an NSNumber:

-(id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row
{
Person *thePerson = [theList objectAtIndex:row];
if (tableColumn == nameTableColumn)
    {
        return thePerson.theName;
    }
    else if (tableColumn == ageTableColumn)
    {
        return [NSNumber numberWithInt:thePerson.theAge];
    }
    else
         return nil;
}
0
votes

int is a value type, but id corresponds to an arbitrary Objective-C pointer type.

You can wrap the int in an NSNumber and return that:

return [NSNumber numberWithInt:thePerson.theAge];