Вы используете ARC, а это значит, что вам нужно сохранять четкую ссылку на объекты, которые вы выделяете, или они исчезнут.
Вы вызываете alloc
для вашего query
объекта, что в случае ручного сохранения / разблокирования будет означать, что объект query
останется живым, пока вы не отправите ему сообщение release
или autorelease
.
Однако в ARC компилятор вставляет эти вызовы для вас, и поскольку он не знает, что вы хотите, чтобы объект query
оставался без присмотра, он освобождает объект query
после того, как вы вызовете [query startQuery]
. Поскольку объект был освобожден, он никогда не публикует уведомление.
Вместо этого вы должны иметь сильную ссылку на объект query
. Самый простой способ сделать это - сделать его переменной экземпляра или свойством strong
.
@interface YourObject : NSObject
{
NSMetadataQuery *query;
}
@end
или
@interface YourObject : NSObject{}
@property (strong) NSMetadataQuery *query;
@end