Хорошо, очень стыдно объявить, что я все понял неправильно. Кажется, что объект был вне области видимости в первую очередь. myObject - это фактически [myObjectList objectForIndex: index], где myObjectList - это NSMutableArray * myObjectList. Это не синтезированное свойство. Объект - это класс, производный от NSObject (@interface Object: NSObject)
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
for(Object* p in myObjectList)
{
NSLog(@"%@", p.name); //this returns a garbled message
}
MyObjectDetailViewController * vc = [[MyObjectDetailViewController alloc] initWithStyle:UITableViewStylePlain];
vc.object = [myObjectList objectAtIndex:indexPath.row];
[self.navigationController pushViewController:vc animated:YES]; //when i hover over "vc" in debugger, it shows that vc.object is defined(i see my name variables) but when i hover over myObjectList in the previous line, the objects say "out of scope"
[vc autorelease];
}
Чтобы покрыть всю землю, вот где создается экземпляр массива. Эта функция является функцией обратного вызова из sqlite's sqlite3_exec.
int callback (void* context, int count, char** values, char** columns)
{
NSMutableArray *list = (NSMutableArray*)context;
Object *obj = [[Object alloc] initWithName:[NSString stringWithUTF8String:values[kName]]];
[list addObject:obj];
[obj release];
NSLog(@"After release");
for(Object *p in list)
{
NSLog(@"%@", p.name); //this prints out okay
}
return SQLITE_OK;
}
Надеюсь, это немного прояснит проблему. Тот факт, что myObjectList находится вне области видимости, но я, похоже, могу извлечь его объекты, действительно странный ...