cs193p – Lecture #14 – Photomania Demo

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

Lecture #14 provides an extensive demo of Core Data.

The code of the demo is available at Stanford and on github.

Slides are available on iTunes …..

The lecture is available at iTunes and is named “14. Photomania Demo (February 21, 2013)”.

FacebooktwitterredditpinterestlinkedintumblrmailFacebooktwitterredditpinterestlinkedintumblrmail

cs193p – Lecture #13 – Core Data Continued

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

Lecture #13 continues with Core Data, shows how to use categories to “enhance” managed objects, and explains how to use Core Data as source for table views.

Slides are available on iTunes …..

The lecture is available at iTunes and is named “13. Core Data Continued (February 19, 2013)”.

FacebooktwitterredditpinterestlinkedintumblrmailFacebooktwitterredditpinterestlinkedintumblrmail

cs193p – Lecture #12 – Core Data

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

Lecture #12 starts with an detailed discussion about the final project (which is addressed to Stanford students only). The second half addresses Core Data and notifications.

Slides are available on iTunes …..

The lecture is available at iTunes and is named “12. Core Data (February 14, 2013)”.

FacebooktwitterredditpinterestlinkedintumblrmailFacebooktwitterredditpinterestlinkedintumblrmail

cs193p – Assignment #5 Task #6

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

Sort all tables alphabetically (and case insensitively) except the Recents table (which should still be sorted with the most recently viewed first). A good solution to this might involve some of the array sorting methods that use blocks.

… actually the code up to this task already does sorting, but now it will be implemented using blocks.

For the tags create a new property – to do not have to resort everything every time the table needs to display a row:

@property (nonatomic, strong) NSArray *tags;
...
- (void)updatePhotosByTag
{
    ...
    self.tags = [[photosByTag allKeys] sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
        return [obj1 compare:obj2 options:NSCaseInsensitiveSearch];
    }];
}

Continue reading “cs193p – Assignment #5 Task #6”

FacebooktwitterredditpinterestlinkedintumblrmailFacebooktwitterredditpinterestlinkedintumblrmail

cs193p – Assignment #5 Task #5

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

Keep as little of the photos’ image data in the heap as you can (i.e. don’t keep strong pointers to any NSData and/or UIImage objects that you are not currently displaying). You should have at most 2 photos’ image data in memory at a given time, preferably only 1 (or 0 if none are in the process of being viewed or fetched).

The current code up to this task does not keep any strong pointers to NSData or NSImage objects as the image is only stored in the image view. Because the iPad uses a single image view there is at most only one image in memory. The iPhone has two image views thus there could be two images in memory. (Using the profiler proves that behavior)
Continue reading “cs193p – Assignment #5 Task #5”

FacebooktwitterredditpinterestlinkedintumblrmailFacebooktwitterredditpinterestlinkedintumblrmail

cs193p – Assignment #5 Task #4

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

Cache photo image data viewed by the user into files in your application’s sandbox. Each photo’s image should be a separate file in the sandbox. Limit the cache’s size to something testable. When this limit is reached, the least recently viewed photos in the cache should be evicted (deleted) to make room for new photos coming in (remember that you can look at a file URL’s resource values to find out when it was last accessed). Your application should never query Flickr for the image data for a photo that it has in its cache (obviously). This cache should persist between application launches.

Before loading an image, check if it is already in the file cache, and load it from there if possible. After the image has been loaded save it to the cache:
Continue reading “cs193p – Assignment #5 Task #4”

FacebooktwitterredditpinterestlinkedintumblrmailFacebooktwitterredditpinterestlinkedintumblrmail

cs193p – Assignment #5 Task #3

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

Your primary table view must now have Refreshing enabled (i.e. you can pull down on it to activate the UIRefreshControl). Doing so should refetch the Stanford photo information from Flickr (of course, it’s unlikely to have changed, but refetch anyway).

You could drag out the refresh-control gestures in storyboard (you would have to do it twice) – or create it in code:

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.refreshControl = [[UIRefreshControl alloc] init];
    [self.refreshControl addTarget:self
                            action:@selector(loadPhtosFromFlickr)
                  forControlEvents:UIControlEventValueChanged];
    [self loadPhtosFromFlickr];
}

… and move the download code to a new method:

- (void)loadPhtosFromFlickr
{
    [self.refreshControl beginRefreshing];
    ...
    dispatch_async(queue, ^{
        ...
        dispatch_async(dispatch_get_main_queue(), ^{
            ...
            [self.refreshControl endRefreshing];
        });
    }); 
}

The complete code is available on github.

FacebooktwitterredditpinterestlinkedintumblrmailFacebooktwitterredditpinterestlinkedintumblrmail