【问题标题】:UIView class getting called in the end of the loopUIView 类在循环结束时被调用
【发布时间】:2016-08-27 14:09:15
【问题描述】:

我是 swift 编程新手,正在测试一些场景。

我有一个 UIView 类,我用它来绘制一些东西。我将使用 for 循环多次将此 UIView 类作为子视图添加到我的主视图控制器中。

我在 coredata 中有一个实体,它存储了我使用 UIVIew 类执行的绘图的配置信息。每个条目都将包含 ID、尺寸和绘图所需的其他一些详细信息。

从 coredata 获取数据后,我使用“for”循环遍历每个条目,然后使用从 coredata 检索到的数据进行绘制(UIView 类作为子视图)。

循环的每次迭代都需要使用 UIView 类创建新的子视图,并从核心数据中检索到尺寸和其他详细信息。但我注意到它会遍历所有条目并在循环结束时调用 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")
    }

绘图项目

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)

}

【问题讨论】:

  • 我猜在遍历数组 NSManagedObject 时,该项目也是一个托管对象类型,它是一个引用类型变量。因此,即使它遍历数组,作为引用类型,也只会使用最终值。
  • 您发布的代码不包含任何循环,即使循环是您问题的关键部分。
  • @Tom Harrington 实际上我正在迭代 NSManagedObject 并将 UIView 添加为该循环中的子视图。
  • @snjmhj 那么请您指导我如何解决这个问题,首先将 coredata 值存储到单独的数组中然后遍历它们会有帮助吗?
  • @VijeshKk 我之前的回答可能有误。我认为失败点是 GlobalVariable.sharedManager.title = titleout 并且实例化视图并不意味着它的 drawRect 将被调用。我的解决方案是在 DrawLanes 中创建一个新变量并使用 titleout 初始化变量,然后在 drawRect 中放置 button.title = self.variable

标签: ios swift core-data uiview


【解决方案1】:

我认为失败点是GlobalVariable.sharedManager.title = titleout,并且实例化视图并不意味着它的drawRect会被调用。

我的解决方案是在 DrawLanes 中创建一个新变量并使用 titleout 初始化变量

DrawLines.buttonTitle = titleout

在drawRect中放

button.title = self.buttonTitle

【讨论】:

    猜你喜欢
    • 2018-03-02
    • 1970-01-01
    • 2013-12-24
    • 2022-12-03
    • 2021-09-15
    • 2018-09-08
    • 1970-01-01
    • 2016-06-14
    • 2014-04-20
    相关资源
    最近更新 更多