Topics: Cocoapods, Core Data
Symptom: The search functionality works most of the time but in a small set of users, the search results are empty.
Mistake: Sending an API call in the prepareForSegue method.
Let’s say that we have a view controller that searches Foursquare for restaurants. If I press submit on my search view controller, I’m pushed to a table view controller with the results. I can put the API call to fetch the data from Foursquare in the prepareForSegue call.
99.5% of the the time, it works, but the other 0.5% of the time, the previous view controller can be removed before our API call has come back with the results and we’ll be left with a table view controller with no results.
This is called a race condition and it’s a very annoying problem to fix because it’s hard to detect and I would have to have millions of users like Facebook to have this problem.
With search view controllers, pass the query to the results view controller and send the API call from there.
Lesson: Avoid race conditions always.
Symptom: I was trying to test a tableViewController to make sure that it worked with Core Data by adding 3 test objects: @”Test”, @”Test Test”, and @”Test Test Test”. I was only seeing one of the three items repeated three times.
Mistake: Messing up basics when moving on to more advanced topics.
I wasted a couple hours last week when I messed up the cellForRowAtIndexRow by writing
cell.textlabel.text = self.store.pirates[[self.tableview indexPathForSelectedRow].row];
instead of
cell.textlabel.text = self.store.pirates[indexPath.row];
Lesson: Watch for simple mistakes, when something is not working as expected.