【发布时间】:2015-10-03 18:35:32
【问题描述】:
在一个项目中,我使用 Objective-c 2.0-Swift2.0 和 XCode 7.0。
所以问题是: 我正在尝试将从 txt 文件中获取的一些字符串显示到 UiTextView 对象中。 另一个 Object-C 调用的捕获很好。 文件txt的读取很好
...但是将字符串放入 UITextView!返回我总是零。这是一个虚拟的工作,但是......它仍然不工作!
我尝试做与单个应用程序 Swift 文件相同的操作:它有效! p.s.请注意,我做了一个 IBoutlet 将 UIView 对象连接到 StoryBoard 到这个类。
这是代码,如果您需要更多详细信息,我很乐意提供。
import UIKit
@objc(TextControllerSwift) class TextControllerSwift: UIViewController {
var textRoom: String?
var textPlaying: String?
@IBOutlet weak var textMuseum: UITextView!
override func viewDidLoad() {
super.viewDidLoad()
realplay()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
func playText(textSelect: String) {
//textSelect REturn a string value from another Object-C Class -See comments in the Segue add in.
textPlaying = textSelect
}
func realPlay(){
let path = NSBundle.mainBundle().pathForResource(textPlaying, ofType:"txt")
if (path != nil){
//read the file
do {
let textRoom = try NSString(contentsOfFile: path!, encoding: NSUTF8StringEncoding)
print(textRoom)
}
catch {/* let's ignore when i didn't find file */}
textMuseum!.text="pippo" //Nil
print(textMuseum!.text) //Nil
textMuseum.text=textMuseum.text.stringByAppendingString(String(textRoom)) //Nil
}
}}
它给我 "致命错误:在展开可选值时意外发现 nil"
为什么?为什么?在同一个项目中,我调用了另一个 Swift 类,它工作得非常好。 (也就是我遵循了 Swift&Objective-C 类共存的指南) 非常感谢您的回答。
编辑: 添加了关于来自 Objective-C 的调用者的信息,也许这会有所帮助。
`if ([segue.identifier isEqualToString:@"segueIntroTesto"]) {
NSLog(@"%@ in segueIntroTesto" , selectedIntroFilm);
TextControllerSwift *destViewController = segue.destinationViewController;
[destViewController playText:selectedIntroFilm];
}`
EDIT2::在 playText func 下删除 *self.viewDidLoad()*。
EDIT3::将函数 playText() 拆分为另一个函数,以便让 XCode (uffff) 有时间获取新视图,然后我删除了旧的该死的 Outlet :D ...干杯我解决了谢谢
【问题讨论】:
-
如果设置断点并单步执行代码,哪一行会报错?
-
我把//Nil评论放在哪里......
-
为什么
self.viewDidLoad()里面有playText?删除它。根据我的经验,有时当您尝试使用IBOutlets时,在viewDidLoad内部它们仍然为零,请尝试在viewDidAppear中使用 -
哦,我忘了删除它,因为我添加了“尝试”以获得一些想法。顺便说一句,结果是一样的。
标签: ios objective-c xcode swift2