Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SWIFT COREDATA-使用“循环”遍历结果;在「;循环以构建单独的数组_Swift_For Loop_Core Data - Fatal编程技术网

SWIFT COREDATA-使用“循环”遍历结果;在「;循环以构建单独的数组

SWIFT COREDATA-使用“循环”遍历结果;在「;循环以构建单独的数组,swift,for-loop,core-data,Swift,For Loop,Core Data,SWIFT岩心数据 我在设置for-in循环以从获取中收集结果时遇到问题。通过fetch results[index]获取单个结果没有问题,但在循环中插入for会导致错误(类型不匹配)或(类型在生成器中不包含成员)。我想使用提取结果填充一个单独的数组 非常感谢您提供的任何帮助 代码节选: import Foundation import UIKit import CoreData // globaals var pickResult:String? var pickMultiresult:[An

SWIFT岩心数据 我在设置for-in循环以从获取中收集结果时遇到问题。通过fetch results[index]获取单个结果没有问题,但在循环中插入for会导致错误(类型不匹配)或(类型在生成器中不包含成员)。我想使用提取结果填充一个单独的数组

非常感谢您提供的任何帮助

代码节选:

import Foundation
import UIKit
import CoreData
// globaals
var pickResult:String?
var pickMultiresult:[AnyObject]?
// add var
var fullnameMulti:[String]?  // array of full names
var i:Int = 0
// end new var
class ClientPicker:UIViewController, UIPickerViewDelegate {
    // connections

    @IBOutlet weak var singleResult: UITextField!
    let managedObjectContext = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext
    @IBOutlet weak var firstname: UITextField!
    @IBOutlet weak var status: UILabel!
    var lastname:String = ""
    var phone:String = ""
    var email:String = ""

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
 }
 // MARK: ********** block 2 --- findClient ****
    @IBAction func findClient(sender: AnyObject) {
        let entityDescription = NSEntityDescription.entityForName("Contacts", inManagedObjectContext: managedObjectContext)
        let request = NSFetchRequest()
        request.entity = entityDescription
        let pred = NSPredicate(format: "(firstname = %@)", firstname.text!)
        request.predicate = pred

        do {
            var results = try managedObjectContext.executeFetchRequest(request)
            multiresult = results
            if results.count > 0 {
//                let match = results[0] as! NSManagedObject  NOTE: these return correct data for indices 0 and 3
//                let match = results[3] as! NSManagedObject  NOTE: these return correct data for indices 0 and 3 
                status.text = "There are  \(results.count) people named \(firstname.text!)"
            } else {
                status.text = "No Match"
            }
        } catch let error as NSError {
            status.text = error.localizedFailureReason
        }



// for in loop to populate firstnameMulti array
        i = 0
    for i in results{
        var p = i
        let match = results[p] as! NSManagedObject

                /* the following code returns correct fullname when used outside of for loop
                but error when I use the for loop  */
                firstname.text = match.valueForKey("firstname") as? String
                /*****************  concatenate first and last names  ********/
                let first = match.valueForKey("firstname") as? String
                let last = match.valueForKey("lastname") as? String
                // concatenate
                var fullname:String = ""
                fullname = "\(first!) \(last!)"
                singleResult.text = fullname       
        }
}

*/  error: value of type string has no member in Generator */

在循环中填充文本字段的文本,并在每次迭代时覆盖它。这没有任何意义

要生成全名数组,请获取对象并强制转换到适当的NSManagedObject子类,例如
Person
,这样您就可以得到
[Person]
数组,然后只需使用
map

let nameList = results.map { "\($0.firstname) \($0.lastname)" }

这里有几个问题,但我将集中讨论你所问的那些问题

首先,您将
i
声明为
Int
,然后尝试在
for in
循环中使用它。这将失败

其次,您应该在获取过程中处理类型转换:

var results = try managedObjectContext.executeFetchRequest(request) as! [NSManagedObject]
现在您有了一个类型为
NSManagedObject
的集合,您的
for in
变得更干净了:

for match in results {

谢谢,我更改了这两条语句,去掉了无关的变量,但现在又出现了另一个错误。你能告诉我一个从fetch构建数组的示例代码吗?我在回答中显示的第一行代码提供了你需要的数组。你犯了什么错误?给出含糊的评论没有价值,也不能让任何人给你提供帮助。如果你要投票否决我,至少留下一条评论,为什么你认为我的答案是错误的。