cs193p – Project #4 Assignment #4 Task #9

Please note, this blog entry is from a previous course. You might want to check out the current one.

You must not block the main thread of your application with a network request at any time.

Hopefully, we took care of this already in our “new” code. But there is a legacy from the code of the lecture which needs a minor tweak. Move the download of the profile images to an asynchronous queue, when the images has been download, check if the image is still valid (the tweet for this image might not be on screen any more) and set the image:
Continue reading “cs193p – Project #4 Assignment #4 Task #9”

FacebooktwitterredditpinterestlinkedintumblrmailFacebooktwitterredditpinterestlinkedintumblrmail

cs193p – Project #4 Assignment #4 Task #8

Please note, this blog entry is from a previous course. You might want to check out the current one.

Keep track of the most recent 100 Twitter searches the user has performed in your application. Add a UITabBarController to your application with a tab for searching (i.e. your main UI) and a second tab showing these most recent search terms in a table view (uniqued with most recent first). When a user clicks on a search term in the second tab, segue (stay in that same tab) to show the most recent Tweets matching that search term. Store these most recent searches permanently in NSUserDefaults so that your application doesn’t forget them if it is restarted.

Embed the current initial view controller (which should be your navigation view controller) in a tab view controller. Add a new table view controller and embed it in a navigation view controller. Add this new navigation view controller to the tab view controller, and choose nice icons for the two new tabs of the tab view controller. Create a new class for the new table view controller and segue from its cell to the twitter table view controller. Don’t forget to provide sensible names for the cell and the segue identifiers:

cs193p - Project #4 Assignment #4 Task #8 - tab view controller
cs193p – Project #4 Assignment #4 Task #8 – tab view controller

Continue reading “cs193p – Project #4 Assignment #4 Task #8”

FacebooktwitterredditpinterestlinkedintumblrmailFacebooktwitterredditpinterestlinkedintumblrmail

cs193p – Project #4 Assignment #4 Task #7

Please note, this blog entry is from a previous course. You might want to check out the current one.

If the user clicks on an image in your newly created view controller, segue to a new MVC which lets the user scroll around and zoom in on the image. When the image first appears in the MVC, it should display zoomed (in its normal aspect ratio) to show as much of the image as possible but with no “whitespace” around it.

Copy the image-view controller from the storyboard of the Cassini project to the smashtag storyboard and create a segue from the image-table-view cell to the new view controller:

cs193p - Project #4 Assignment #4 Task #7 - image view controller
cs193p – Project #4 Assignment #4 Task #7 – image view controller

Continue reading “cs193p – Project #4 Assignment #4 Task #7”

FacebooktwitterredditpinterestlinkedintumblrmailFacebooktwitterredditpinterestlinkedintumblrmail

cs193p – Project #4 Assignment #4 Task #6

Please note, this blog entry is from a previous course. You might want to check out the current one.

If the user clicks on a mentioned url in your newly created view controller, you should open up that url in Safari (see Hints below for how to do that).

Before a segue fires, check if the keyword is actually a link. If so, block it from firing and open the link instead:

    override func shouldPerformSegueWithIdentifier(identifier: String?, sender: AnyObject?) -> Bool {
        if identifier == Storyboard.KeywordSegueIdentifier {
            if let cell = sender as? UITableViewCell {
                if let url = cell.textLabel?.text {
                    if url.hasPrefix("http") {
                        UIApplication.sharedApplication().openURL(NSURL(string: url)!)                        
                        return false
                    }
                }
            }
        }
        return true
    }

The complete code for task #6 is available on GitHub.

FacebooktwitterredditpinterestlinkedintumblrmailFacebooktwitterredditpinterestlinkedintumblrmail

cs193p – Project #4 Assignment #4 Task #5

Please note, this blog entry is from a previous course. You might want to check out the current one.

If a user touches an entry for a hashtag or a user in the “mentions table view” that you created in Required Task 2 above, you should segue to show the results of searching Twitter for that hashtag or user. It should be searching for hashtags or users, not just searching for a string that is the name of the hashtag or user (e.g. search for “#stanford”, not “stanford”). The view controller to which you segue must work identically to your main Tweet-viewing view controller (TweetTableViewController).

Create a segue from the keyword cell to the initial table view controller (and name its identifier):

cs193p - Project #4 Assignment #4 Task #5 - Storyboard
cs193p – Project #4 Assignment #4 Task #5 – Storyboard

Continue reading “cs193p – Project #4 Assignment #4 Task #5”

FacebooktwitterredditpinterestlinkedintumblrmailFacebooktwitterredditpinterestlinkedintumblrmail

cs193p – Project #4 Assignment #4 Task #4

Please note, this blog entry is from a previous course. You might want to check out the current one.

If a section has no items in it, there should be no header visible for that section.

… oops, didn’t notice that. We need to check if there are items to show:

    var tweet: Tweet? {
        ...
                if media.count > 0 { ... }
            ...
                if urls.count > 0 { ... }
            ...
                if hashtags.count > 0 { ... }
            ...
                if users.count > 0 { ... }
            ...
    }

The complete code for task #4 is available on GitHub.

FacebooktwitterredditpinterestlinkedintumblrmailFacebooktwitterredditpinterestlinkedintumblrmail

cs193p – Project #4 Assignment #4 Task #3

Please note, this blog entry is from a previous course. You might want to check out the current one.

Each section in the mentions table view should have an appropriate header.

We store already the title in our data structure, now just use it:

    override func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
        return mentions[section].title
    }

The complete code for task #3 is available on GitHub.

FacebooktwitterredditpinterestlinkedintumblrmailFacebooktwitterredditpinterestlinkedintumblrmail