Должен ли я вызывать метод runModal NSSavePanel только из основного потока?

У меня странные, хотя и редкие, сбои в моем приложении.

Я подозреваю, что это происходит потому, что runModal из NSSavePanel вызывается в потоке, отличном от основного потока.

Я прав, что это может быть причиной сбоев?

3 ответа

Да.

У меня были сбои вызова runModal не в ту нить. performSelectorOnMainThread часто полезно исправить это.

Смотрите руководство по программированию потоков от Apple:

http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Multithreading/Introduction/Introduction.html

"Небезопасные классы: NSWindow и все его потомки".

NSSavePanel является потомком NSWindow.

Как правило, весь доступ к элементам пользовательского интерфейса должен осуществляться из основного потока, также иногда называемого потоком пользовательского интерфейса.

Так что я бы сказал, да, вы должны открыть его из основного потока.

Относительно того, является ли это источником ваших сбоев, трудно сказать. Мой скромный опыт подсказывает мне, что сбои могут быть вызваны разными вещами...

Другие вопросы по тегам