Welcome to the Treehouse Community
Want to collaborate on code errors? Have bugs you need feedback on? Looking for an extra set of eyes on your latest project? Get support with fellow developers, designers, and programmers of all backgrounds and skill levels here with the Treehouse Community! While you're at it, check out some resources Treehouse students have shared here.
Looking to learn something new?
Treehouse offers a seven day free trial for new students. Get access to thousands of hours of content and join thousands of Treehouse students and alumni in the community today.
Start your free trial
Will Macleod
Courses Plus Student 18,780 Pointsvariable from a for in array that won't display on my collection view swift
// ViewController.swift
// Fashun
//
// Created by Alex Macleod on 20/10/14.
// Copyright (c) 2014 Alex Macleod. All rights reserved.
//
import UIKit
class ViewController: UIViewController, UICollectionViewDelegateFlowLayout, UICollectionViewDataSource {
var collectionView: UICollectionView?
var instanceOfCustomObject: CustomObject = CustomObject()
var accessToken: NSString!
var userDefaults: NSUserDefaults!
// the range represents integer values 0, 1, and 2
// the range now represents integer values 6, 7, and 8
let colorWheel = ColorWheel()
var photoCount: Int! = 0
var photos: UIImage! = UIImage()
// private let api = "d4984c8cfa78689bd066d82bec820fd5"
override func viewDidLoad() {
super.viewDidLoad()
userDefaults = NSUserDefaults.standardUserDefaults()
self.accessToken = userDefaults!.objectForKey("accessToken") as NSString
println(self.accessToken)
// instanceOfCustomObject.someProperty = "Hello World"
// var accessToken : NSString? = NSString(instanceOfCustomObject.accessToken)
// println(accessToken)
// instanceOfCustomObject.authorize()
// instanceOfCustomObject.simpleAuth()
// Do any additional setup after loading the view, typically from a nib.
let layout: UICollectionViewFlowLayout = UICollectionViewFlowLayout()
// layout.sectionInset = UIEdgeInsets(top: 20, left: 0, bottom: 0, right: 0)
layout.itemSize = CGSize(width: 124, height: 124)
layout.minimumInteritemSpacing = 1.0
layout.minimumLineSpacing = 1.0
collectionView = UICollectionView(frame: self.view.frame, collectionViewLayout: layout)
collectionView!.dataSource = self
collectionView!.delegate = self
collectionView!.registerClass(Cell.self, forCellWithReuseIdentifier: "Cell")
collectionView!.backgroundColor = UIColor.whiteColor()
self.view.addSubview(collectionView!)
getData()
}
func getData() -> Void {
let baseUrl = NSURL(string:"https://api.instagram.com/v1/users/3/media/recent/?access_token=\(self.accessToken)")
let forcastUrl = NSURL(string: "", relativeToURL: baseUrl)
// let data = NSData(contentsOfURL: forcastUrl)
// println(data)
let sharedSession = NSURLSession.sharedSession()
let downloadTask: NSURLSessionDownloadTask = sharedSession.downloadTaskWithURL(baseUrl, completionHandler: { (location: NSURL!, response: NSURLResponse!, error: NSError!) -> Void in
// var urlContents = NSString.stringWithContentsOfURL(location, encoding: NSUTF8StringEncoding, error: nil)
// println(urlContents)
let dataObject = NSData(contentsOfURL: baseUrl)
// println(dataObject)
if (error == nil) {
let responseDictionary: NSDictionary = NSJSONSerialization.JSONObjectWithData(dataObject, options: nil, error: nil) as NSDictionary
var currentResponse = responseDictionary.valueForKeyPath("data.images.standard_resolution.url") as NSArray
// println(currentResponse)
for url in currentResponse {
var urls: NSString = url as NSString
// println(images)
var photoUrls = NSURL.URLWithString(urls)
var err: NSError?
var imageData :NSData = NSData.dataWithContentsOfURL(photoUrls,options: NSDataReadingOptions.DataReadingMappedIfSafe, error: &err)
var photos = UIImage(data:imageData)
}
// println(currentResponse)
// self.currentResponse = currentResponse as NSArray
// self.photoCount = currentResponse.count as Int
// println(self.photoCount)
dispatch_async(dispatch_get_main_queue(), { () -> Void in
self.photoCount = currentResponse.count as Int!
self.collectionView!.reloadData()
// self.temperatureLabel.text = "\(currentWeather.temperature)"
// self.iconView.image = currentWeather.icon!
// self.currentTimeLabel.text = "At \(currentWeather.currentTime!) it is"
// self.humidityLabel.text = "\(currentWeather.humidity)"
// self.percipitationLabel.text = "\(currentWeather.precipProbability)"
// self.summeryLabel.text = "\(currentWeather.summary)"
//
// self.refreshActivityIndicator.stopAnimating()
// self.refreshActivityIndicator.hidden = true
//
// self.refreshButton.hidden = false
})
} else {
let networkIssueController = UIAlertController(title: "Error", message: "I got 99 problems but a bitch ain't one", preferredStyle: .ActionSheet)
let okButton = UIAlertAction(title: "OK", style: .Default, handler: nil)
networkIssueController.addAction(okButton)
let cancelButton = UIAlertAction(title: "Cancel", style: .Cancel, handler: nil)
networkIssueController.addAction(cancelButton)
self.presentViewController(networkIssueController, animated: true, completion: nil)
dispatch_async(dispatch_get_main_queue(), { () -> Void in
//Stop refresh animation
// self.refreshActivityIndicator.stopAnimating()
// self.refreshActivityIndicator.hidden = true
// self.refreshButton.hidden = false
})
}
})
downloadTask.resume()
}
You can see in the getData() function that I have a for in loop, that loops through an array of urls, changes these urls to UIImages and assigns this to a global variable named photos.
```func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell { let cell = collectionView.dequeueReusableCellWithReuseIdentifier("Cell", forIndexPath: indexPath) as Cell println(photos) // cell.textLabel.text = "Text" cell.imageView.image = photos // cell.imageView.backgroundColor = colorWheel.randomColor()
return cell
}
}
You can see in this collectionview function I am trying to display the images by assigning my photos variable (my loops of urls now UIImages) to the imageView cell. Nothing happens I just get a white screen on my IOS simulator but my print statement prints out all the images I am trying to display!
Thanks in advance.
1 Answer
Cody Coats
7,469 PointsYou are not assigning them to your controllers photos variable.
var photos = UIImage(data:imageData)
Create a new variable that is local to the shop of the for loop. To assign to your "global" (not really global your class variable) you can :
photos = UIImage(data:imageData)
//or
self.photos = UIImage(data:imageData)
I prefer using self because it makes it more explicit that I am assigning the current instances property rather than another variable.