Hello Sultans of Swift!Swift NSTextField stringValue не отображает установленное значение
Я новичок в Swift, хотя я много использовал C, C++ и C#. Я столкнулся с ситуацией, которая действительно озадачивает меня. Я собираюсь опубликовать фрагмент кода здесь:
@IBAction func myFunc(sender: AnyObject)
{
let dirPicker: NSOpenPanel = NSOpenPanel()
dirPicker.allowsMultipleSelection = false
dirPicker.canChooseFiles = true
dirPicker.canChooseDirectories = false
dirPicker.runModal()
let selection = dirPicker.URL
if(selection != nil)
{
do
{
print(selection)
let mp3File = try MP3File(path: (selection?.path)!)
let title = mp3File.getTitle()
// This prints OK
print("Title:\t\(mp3File.getTitle())")
// This prints OK too
print("Title:\t\(title)")
print("Artist:\t\(mp3File.getArtist())")
print("Album:\t\(mp3File.getAlbum())")
print("Lyrics:\n\(mp3File.getLyrics())")
fileName.stringValue = (selection?.path)!
// This sets the label songTitle to an empty space and I can't see why.
// If I initialise title to:
// let title = "STRING CONSTANT"
// ...instead of
// let title = mp3File.getTitle()
// ...then it does actually set the correct text on the label songTitle.
// In both cases, printing to the console works fine! Its just setting
// the text on the label that is eluding me!
songTitle.stringValue = title
}
catch ID3EditErrors.FileDoesNotExist
{
print("Error: File Does Not Exist")
}
catch ID3EditErrors.NotAnMP3
{
print("Error: Not an MP3")
}
catch let e
{
print(e)
}
}
}
Когда я пытаюсь установить текст в метке, установив его свойство stringValue переменной она просто отображает пустое пространство, но я могу фактически напечатать переменную консоль просто отлично. Переменная задается как возвращаемое значение функции. Теперь, если я вместо этого задал переменную явно строковой константе, тогда она работает. Это может быть связано с неопределенностью возвращаемого значения функции, но я знаю, что он содержит текст, потому что я могу распечатать его на консоли.
Может ли кто-нибудь определить, что здесь происходит?
Благодаря
EDIT: Я просто установил комментарии в коде для обозначения songTitle вместо имя_файла - извините за путаницу. Речь идет о настройке songTitle.stringValue = титул
EDIT: Это определение songTitle:
@IBOutlet weak var fileName: NSTextField!
@IBOutlet weak var songTitle: NSTextField!
Обратите внимание, что установка свойства stringValue из них на самом деле работает так долго, как я не использовать переменную которому присваивается возвращаемое значение mp3File.getTitle(). Также обратите внимание, что mp3File.getTitle() возвращает значение, и я могу распечатать его на консоли OK.
Что вы получаете с 'debugPrint (title)'? – OOPer
Привет, извините за задержку в ответе - меня не было. Вот 3 отлаживать заявления, которые я добавил: – daeljan
DebugPrint ("DEBUG TEXT") DebugPrint (название) DebugPrint (songTitle.stringValue) – daeljan