Right, if you want to have the array as an ivar you need to hold a retain on it, and release it in -dealloc, making sure it stays around while your instance stays around. Just change [NSMutableArray array] to [[NSMutableArray array] retain] or [[NSMutableArray alloc] init] (the +alloc implies a retain count of 1).
And when you override -dealloc, make sure to call [super dealloc] at the end ;-)
In the current code, just so you know why that particular error message happened, the array was autoreleased immediately, which means it was dealloced at the end of the event. You still had a pointer to it, but the memory was freed, and an NSString just so happened to be allocated in that spot in memory. If you see methods being sent to the utterly wrong class, this is virtually always the reason why it happens. If there was some other random memory that was allocated there, you would have gotten a segfault or bus error.