In this lesson, you learn how to perform the CloudKit operation that fetch a record from the CloudKit’s public database and display it in a textView. Here is a QuickTime movie of the CloudKit operation in action.
|  Code presented on this page assume you are using Xcode 6.4 and Swift version 1.2. So if you are using a newer version of Swift, it may produce errors. Fix them by using Xcode’s Fix-it tool. I assume you are a registered member of Apple’s iOS Developer Program, and you have a real iPhone/iPad device to test the CloudKit code presented here. | 
Modify The Main View
The first thing you have to do is modify the storyboard scene and its class file so they look like this:
Next, reconnect the Find button to the Find() function, reset the Main View Controller scene’s constraints, and enter this code in the Find() function:
@IBAction func find() {
        // Dismiss the keyboard
        itemName.resignFirstResponder()
        if thisApp.userSignedIn == false {
            // The app user's iCloud account is not authenticated
            textView.text = "iCloud is not available.\n\nPlease do the following:\n\n" +
                "1. Sign into your iCloud account\n" +
                "2. Turn on iCloud Drive via the Settings app\n" +
            "3. Relaunch the app"
            // Don't execute code below this if block
            return
        }
        if itemName.text.isEmpty {
            textView.text = "The item name is required."
            return
        }
        var photoUrl: NSURL!
        let item = DatabaseHeleper()
        textView.text = "Searching..."
        // Setup a query
        let predicate = NSPredicate(format: "itemName BEGINSWITH %@", itemName.text)
        let query = CKQuery(recordType: "Item", predicate: predicate)
        // Execute the query
        db.performQuery(query, inZoneWithID: nil) { results, error in
            if (error != nil) {
                NSOperationQueue.mainQueue().addOperationWithBlock {
                    self.textView.text = "Search error: \(error.localizedDescription)"
                }
            } else {
                if results.count == 0 {
                    // The query returned no records, inform the user in the textView
                    NSOperationQueue.mainQueue().addOperationWithBlock {
                        self.textView.text = "\(results.count) record found for this item.\n"
                        self.imageView.image = nil
                    }
                    return
                }
                // The query returned one or more records, create an array for them
                var listItems = [DatabaseHeleper]()
                for record in results {
                    // Create an item object from the DatabaseHelper class
                    let item = DatabaseHeleper()
                    // Put the CKAsset in a constant
                    let asset: CKAsset = record.valueForKey("itemImage") as! CKAsset
                    // Extract the image from the asset and put it in a constant
                    let photo = UIImage(contentsOfFile: asset.fileURL.path!)
                    // Set the item object's properties
                    item.itemName = record.valueForKey("itemName") as! String
                    item.itemPhoto = photo!
                    // Add the itema object in the listItems array
                    listItems.append(item)
                    // On the main thread, display item name and photo in the view's controls
                    NSOperationQueue.mainQueue().addOperationWithBlock {
                        self.itemName.text = item.itemName
                        self.imageView.image = item.itemPhoto
                        self.textView.text = "\(results.count) record found for this item.\n"
                    }
                }
            }
        }
}
That’s it! Comments are welcomed! 🙂
 
