FROM : Charles Srstka
DATE : Sat Jun 21 17:19:47 2008
Don't do this:
NSLog(@"selected row: %@", [tableView selectedRow]);
Instead, do this:
NSLog(@"selected row: %u", [tableView selectedRow]);
Trying to interpret an int as an object is what's causing your crash.
Charles
On Jun 21, 2008, at 10:13 AM, Daniel Richman wrote:
> Thanks! I don't know why they introduced NSInteger. It sounds like
> it would be a subclass of NSNumber.
>
> That didn't seem to be the problem, though. The program still
> crashes only when you aren't deleting the first item. I made a movie
> of it; it's at http://danielrichman.com/tmp/ToDoList_Problem.mov .
>
> Thanks,
> Daniel
>
>
> Graham Cox wrote:
>> I ran into a very similar problem just today.
>>
>> There is an error in your code though, unrelated to my problem, but
>> is probably yours:
>>
>>> int selectedRow = [((NSNumber *)[tableView selectedRow]) intValue];
>>
>>
>> -selectedRow simply returns an int, so all that casting to an
>> NSNumber* and fetching its -intValue is bogus. You want:
>>
>> int selectedRow = [tableView selectedRow];
>>
>> (Aside: I think the addition in Leopard of the NSInteger data type
>> is confusing a lot of people - it's just a typedef for 'int', it's
>> not an object, and definitely not an NSNumber. But I've seen a few
>> errors confusing the two lately that didn't seem to happen before).
>>
>> hth,
>>
>>
>> Graham
>>
>>
>>
>>
>> On 21 Jun 2008, at 12:51 pm, Daniel Richman wrote:
>>
>>> I've got an NSTableView that displays the data in an
>>> NSMutableArray. (The program is a to-do list.) I just tried adding
>>> a function to allow you to delete an item: you select the item in
>>> the table and then click delete. My code is as follows:
>>>
>>> - (IBAction)deleteItem:(id)sender
>>> {
>>> int selectedRow = [((NSNumber *)[tableView selectedRow]) intValue];
>>> NSLog(@"Selected row is %d", selectedRow);
>>> if (selectedRow != -1) {
>>> NSLog(@"Deleting '%@'", [toDoList objectAtIndex:selectedRow]);
>>> [toDoList removeObjectAtIndex:selectedRow];
>>> [tableView reloadData];
>>> }
>>> }
>>>
>>> The problem is that if I try to delete any item other than the
>>> very first one (index 0), the program crashes. I did some log
>>> work, which revealed that the first line is causing problems (int
>>> selectedRow...). But that doesn't explain why the deleting the
>>> first item works ok. I'm stumped. Any ideas?
>>
> _______________________________________________
>
> Cocoa-dev mailing list (<email_removed>)
>
> Please do not post admin requests or moderator comments to the list.
> Contact the moderators at cocoa-dev-admins(at)lists.apple.com
>
> Help/Unsubscribe/Update your Subscription:
> http://lists.apple.com/mailman/options/cocoa-dev/<email_removed>
>
> This email sent to <email_removed>
DATE : Sat Jun 21 17:19:47 2008
Don't do this:
NSLog(@"selected row: %@", [tableView selectedRow]);
Instead, do this:
NSLog(@"selected row: %u", [tableView selectedRow]);
Trying to interpret an int as an object is what's causing your crash.
Charles
On Jun 21, 2008, at 10:13 AM, Daniel Richman wrote:
> Thanks! I don't know why they introduced NSInteger. It sounds like
> it would be a subclass of NSNumber.
>
> That didn't seem to be the problem, though. The program still
> crashes only when you aren't deleting the first item. I made a movie
> of it; it's at http://danielrichman.com/tmp/ToDoList_Problem.mov .
>
> Thanks,
> Daniel
>
>
> Graham Cox wrote:
>> I ran into a very similar problem just today.
>>
>> There is an error in your code though, unrelated to my problem, but
>> is probably yours:
>>
>>> int selectedRow = [((NSNumber *)[tableView selectedRow]) intValue];
>>
>>
>> -selectedRow simply returns an int, so all that casting to an
>> NSNumber* and fetching its -intValue is bogus. You want:
>>
>> int selectedRow = [tableView selectedRow];
>>
>> (Aside: I think the addition in Leopard of the NSInteger data type
>> is confusing a lot of people - it's just a typedef for 'int', it's
>> not an object, and definitely not an NSNumber. But I've seen a few
>> errors confusing the two lately that didn't seem to happen before).
>>
>> hth,
>>
>>
>> Graham
>>
>>
>>
>>
>> On 21 Jun 2008, at 12:51 pm, Daniel Richman wrote:
>>
>>> I've got an NSTableView that displays the data in an
>>> NSMutableArray. (The program is a to-do list.) I just tried adding
>>> a function to allow you to delete an item: you select the item in
>>> the table and then click delete. My code is as follows:
>>>
>>> - (IBAction)deleteItem:(id)sender
>>> {
>>> int selectedRow = [((NSNumber *)[tableView selectedRow]) intValue];
>>> NSLog(@"Selected row is %d", selectedRow);
>>> if (selectedRow != -1) {
>>> NSLog(@"Deleting '%@'", [toDoList objectAtIndex:selectedRow]);
>>> [toDoList removeObjectAtIndex:selectedRow];
>>> [tableView reloadData];
>>> }
>>> }
>>>
>>> The problem is that if I try to delete any item other than the
>>> very first one (index 0), the program crashes. I did some log
>>> work, which revealed that the first line is causing problems (int
>>> selectedRow...). But that doesn't explain why the deleting the
>>> first item works ok. I'm stumped. Any ideas?
>>
> _______________________________________________
>
> Cocoa-dev mailing list (<email_removed>)
>
> Please do not post admin requests or moderator comments to the list.
> Contact the moderators at cocoa-dev-admins(at)lists.apple.com
>
> Help/Unsubscribe/Update your Subscription:
> http://lists.apple.com/mailman/options/cocoa-dev/<email_removed>
>
> This email sent to <email_removed>
| Related mails | Author | Date |
|---|---|---|
| Daniel Richman | Jun 21, 04:51 | |
| Graham Cox | Jun 21, 05:11 | |
| Daniel Richman | Jun 21, 17:13 | |
| Charles Srstka | Jun 21, 17:19 | |
| Daniel Richman | Jun 21, 17:23 | |
| Nick Zitzmann | Jun 21, 21:24 | |
| Daniel Richman | Jun 21, 21:31 |






Cocoa mail archive

