我是快速编程的新手,正在测试一些场景。
我有一个UIView类,我用它来绘制东西。我将使用for循环将此UIView类作为子视图添加到我的主viewcontroller中多次。
我在coredata中有一个实体,它存储了我使用UIVIew类进行绘图的配置信息。每个条目都有详细信息,如ID,Diamension和绘图所需的其他一些细节。
从coredata获取数据后,我使用'for'循环遍历每个条目,然后使用从coredata检索的数据绘制(UIView类作为子视图)。
循环的每次迭代都需要使用UIView类创建新的子视图,其中维度和从coredata检索的其他详细信息。但我注意到它循环遍历所有条目并在循环结束时调用UIView类,即使.addsubView处于循环的中间。
我可以看到它创建了与核心数据条目相同数量的子视图,但由于视图在循环结束时被调用,因此所有子视图都是使用最后一个条目核心数据的详细信息创建的。
我的代码是这样的。请帮帮我。感谢。
主视图控制器。
let appDel:AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
let context: NSManagedObjectContext = appDel.managedObjectContext
do {
let request = NSFetchRequest(entityName: "Projects")
let results = try context.executeFetchRequest(request)
if results.count > 0 {
GlobalVariable.sharedManager.starty = 50
for item in results as! [NSManagedObject]{
let titleout = String(item.valueForKey("title")!)
let startxp1 = item.valueForKey("startx")
let startxp2 = item.valueForKey("starty")
let projtag = item.valueForKey("pid")
GlobalVariable.sharedManager.title = titleout
let DrawLanes = DrawProj(frame: CGRect(x: startx, y: starty, width: 500, height: 200))
DrawLanes.backgroundColor = UIColor.clearColor()
DrawLanes.userInteractionEnabled = true
DrawLanes.tag = projtag
MainScroller.addSubview(DrawLanes)
}
}
}catch {
print ("there was an error in fetch")
}
DrawProj
override func drawRect(rect: CGRect) {
let button = UIButton(type: .System) // let preferred over var here
button.frame = CGRectMake(24, 15, 300, 20)
button.backgroundColor = UIColor.orangeColor()
button.userInteractionEnabled = false
button.text = GlobalVariable.sharedManager.title
self.addSubview(button)
}
答案 0 :(得分:0)
我认为失败点是GlobalVariable.sharedManager.title = titleout
并且实例化视图并不意味着它将被调用drawRect。
我的解决方案是在DrawLanes
中创建一个新变量,并使用titleout
DrawLines.buttonTitle = titleout
并在drawRect put
中 button.title = self.buttonTitle