Updating the item view with the feed items
Video: Updating the item view with the feed itemsAt this point, we have a working parser running in a separate thread that's updating items in the database. Now, it's time to update the ItemTableView from the database, and now that all the heavy lifting has been done, this becomes pretty simple. We'll start one by making a working copy of BWRSS-XML-04. In this case, I'm going to use the -done version. You can use the one that you completed in the last movie, if you've been following along with the exercises. I'm going to rename this to BWRSS-XML-05, and I'm going to open it in Xcode by double-clicking on the Xcode project file.
Viewers: in countries Watching now:
The iOS software development kit (SDK) includes the popular SQLite library, a lightweight yet powerful relational database engine that is easily embedded into an application. In this course, Bill Weinman teaches you how to build an RSS reader for iOS devices, integrating XML data and a streamlined interface. He explains how to use the SQLite database, display information in a table view, code view controllers, and create a preferences pane for your app. The resulting application is optimized for all iPhone and iPad displays.
- Prototyping the app
- Coding and working with a testbed
- Creating an Objective-C interface for SQLite
- Designing a database schema
- Creating the view controllers
- Reading and writing to the database
- Parsing the RSS feed with NSXMLParser
- Updating the item view with feed items
- Implementing the pull to refresh gesture for iOS 6
- Creating a universal application with multiple views
Updating the item view with the feed items
At this point, we have a working parser running in a separate thread that's updating items in the database. Now, it's time to update the ItemTableView from the database, and now that all the heavy lifting has been done, this becomes pretty simple. We'll start one by making a working copy of BWRSS-XML-04. In this case, I'm going to use the -done version. You can use the one that you completed in the last movie, if you've been following along with the exercises. I'm going to rename this to BWRSS-XML-05, and I'm going to open it in Xcode by double-clicking on the Xcode project file.
I'm going to go ahead and expand this and select the iPhone Simulator there and select the ItemsTableViewController here. I'm going to minimize this Utilities Bar, and that way we have plenty of screen real estate here to look at our code. So, you notice as we add items to the database here, we have this little NSLog that displays the items. If I go ahead and run this in the Simulator-- I've selected the iPhone Simulator, and I'm going to run this.
You see that as I select a feed, we get the output down here in the log, and that's from this NSLog here. So, we have the item title, we have the pubDate, and we have the URL. I'm going to stop the Simulator by pressing Command+Period, and we'll go ahead and minimize this so that we have some room here. Now, what we have to do is to update the TableView from the database. So, there are couples of steps to that.
We're going to come back up here to our Table view data source section and the number of sections in the TableView is going to be one because there's always just one section. We don't use the Sections Feature for this application. Number of rows in section is already filled out here. We have the itemRowIDs getting updated from the getItemIDs in the database and then we return the count and so that's the number of rows in the section. I'm going to press Command+S here on my keyboard to save.
Now, our cellForRowAtIndexPath, this is a bit of code, so we're going to go ahead and read this from a txt file, coming back here into Finder, our 05-Table.txt. We're just going to grab this whole thing because this is all just that one method. I'm going to select all with Command+A and Command+C to copy and come back here into Xcode, and I'm going to select this method here, cellForRowAtIndexPath. Select the entire method and paste and then we can look at the code here in Xcode.
I'm going to press Command+S on my keyboard to save. Our CellIdentifier, we want to come back over here into the iPhone storyboard and select our cell and bring up our Utilities View. You see the Identifier here says ItemCell, all right? If we come back over here to our TableViewController, we see that it says ItemCell, so it does match. That's important. If it doesn't match, we know that the cell won't get updated.
Now, we get the FeedItem based on the indexPath.row, and now we have what I call the clever variable font size trick. It's really very simple. All we're doing here is we're taking the text that's going to go in the ItemCell, and we're looking at whether it would take up more than one line, and if it takes up more than one line, then we're using a smaller font size, and we're using a larger font size if it takes up just the one line. I'll show you that when we run this.
Again, we're reformatting the date. This time we're taking an SQLDate, and we're making it into a displayable date, and if we look down here in our Utility methods, SQLDateToDate, that puts it in an NSDate format and then we have dateToLocalizedString, which puts it in a localized format. If we come back up here to our cellForRowAtIndexPath, you see we call dateToLocalizedString, based on the SQLDateToDate, and that all gets loaded into the detailTextLabel.
Now just before we run this, we want to come back up here to addItemsToList, and we just want to take out this NSLog line here. We're not going to need that anymore because we're now updating the TableView. So, I'll save this, and we've got iPhone Simulator selected, and we'll go ahead and we'll run this in the Simulator, and I'll select one of these feeds, and there we have it. Now, we have our data being displayed, and you'll notice we have the title and the date in the localized format. If I go ahead and look up one of these other entries, you'll notice that we have two different font sizes.
This line here InDesign FX is in a larger font than these that have more than one line. What can happen here as well, I don't have an example of it here, but I think I have an example of it in this one. You'll notice that some of these are in a smaller size because they wouldn't fit all on one line in the larger size. So, this one is a larger size, this one is a larger size, and these three are actually the smaller size and they don't wrap around to the second line, but if they were in the larger size, they would and so they get that smaller font size anyway.
So, that's that clever font-size trick that's used in cellForRowAtIndexPath. Now, we have a working TableView for the feed items. It reads the RSS feed from the net, it parses it in a separate thread, it stores the results in the database, and it reads the results from the database for display in the TableView. We'll implement a WebView for displaying the items in a later chapter.
Find answers to the most frequently asked questions about iOS SDK and SQLite: Building Data-Driven Apps (2013) .
Here are the FAQs that matched your search "" :
- Q: Why is the RSSDB library in the exercise files different than the one in the videos?
A: The RSSDB library had to be updated to work around a bug in the iOS 7 SDK.
There is a bug in the iOS 7 SDK that prevents the BWDB fast enumeration implementation from working on a device. The symptom is code that runs fine on the emulator, but not on a device. iOS devices use an ARM processor, while the emulator runs on your Mac's Intel processor. This points to the LLVM ARM code generator as the source of the bug. Because the bug appears to be in the LLVM compiler, it may be some time before it is fixed.
As a workaround we have changed the getFeedIDs and getItemIDs methods in the RSSDB library so they don't use Objective C fast enumeration.
Please note that this same bug also affects some of the BWDB testbed code in Chapter 2. The result is that it will run on the emulator but not on a device.
- Q: After upgrading to Xcode 5.1 I get an error that says:
"Used type va_list (aka_builtin_va_list) where arithmetic or pointer type is required"
- A: Please download the exercise files again to get the latest version of the BWDB library.
- Q: I'm using Xcode 6. Why am I getting error messages with the exercise files?
- A: A lot has changed in iOS since this course was released. The author is in the process of rewriting the code and updating the course for iOS 8. In the meantime he has prepared a version of the app that works in iOS 8 and Xcode 6. Download it here:http://ios.bw.org/
Sorry, there are no matches for your search "" —to search again, type in another word or phrase and click search.