Easy-to-follow video tutorials help you learn software, creative, and business skills.Become a member
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.
Get unlimited access to all courses for just $25/month.Become a member