CREDITS EXECUTIVE EDITOR Carol Long PROJECT EDITOR Brian MacDonald TECHNICAL EDITOR Michael Gilbert PRODUCTION EDITOR Rebecca Anderson COPY EDITOR Nancy Rapoport EDITORIAL DIRECTOR Robyn B. Siesky EDITORIAL MANAGER Mary Beth Wakefi eld FREELANCER EDITORIAL MANAGER Rosemarie Graham MARKETING MANAGER Ashley Zurcher PRODUCTION MANAGER Tim Tate VICE PRESIDENT AND EXECUTIVE GROUP PUBLISHER Richard Swadley VICE PRESIDENT AND EXECUTIVE PUBLISHER Barry Pruett ASSOCIATE PUBLISHER Jim Minatel PROJECT COORDINATOR, COVER Lynsey Stanford PROOFREADER Carrie Hunter, Word One New York INDEXER Johnna VanHoose Dinse COVER DESIGNER Michael E. Trent COVER IMAGE © naphtalina/istockphoto.com ffirs.indd ixffirs.indd ix 9/17/10 6:52:57 PM9/17/10 6:52:57 PM ffirs.indd xffirs.indd x 9/17/10 6:52:57 PM9/17/10 6:52:57 PM ABOUT THE AUTHOR PATRICK ALESSI has been fascinated with writing computer programs since he fi rst saw his name fl ash across a terminal in 1980. Since then, he has written software using every language and hard- ware platform that he could get his hands on, including a brief and painful foray into Fortran on a VAX system during his engineering education. Patrick holds a B.S. degree in Civil Engineering from Rutgers University and an M.S. in Computer Science from Stevens Institute of Technology. Professionally, Patrick has focused on data-centric applications for clients ranging from small business databases to large-scale systems for the United States Air Force. Currently, he is focused on the promise of mobility and developing connected applications for mobile devices such as the iPhone and iPad. When he can back away from the computer, Patrick enjoys photography, traveling, and doing just about anything with his family. You can follow him on Twitter at pwalessi and read his blog at iphonedevsphere.blogspot.com. ABOUT THE TECHNICAL EDITOR MICHAEL GILBERT is a long - time systems programmer for various engineering fi rms. He got his start developing games for the Atari ST, and he was a frequent contributing editor for STart magazine. Over the years he has continued to develop gaming software on the PC and Mac for clients worldwide. He ’ s also an expert Flash ActionScript programmer and has produced a popular Internet gaming environment called HigherGames. He now enjoys developing games for the iPhone and iPad, and currently has three games in the AppStore (Wordigo, Jumpin ’ Java, and Set Pro HD). In his spare time, he enjoys trying to defeat his wife Janeen in a friendly game of Scrabble. ffirs.indd xiffirs.indd xi 9/17/10 6:52:57 PM9/17/10 6:52:57 PM ffirs.indd xiiffirs.indd xii 9/17/10 6:52:57 PM9/17/10 6:52:57 PM AC K N O W LED G M ENT S I WOULD LIKE TO TAKE THIS OPPORTUNITY to thank everyone who made this book possible. Carol Long, my executive editor, took a chance with a fi rst - time author and shepherded my idea through the acquisitions process. My project editor, Brian MacDonald, was always there to answer every question that I had about writing and the publishing process. Mike Gilbert, my technical editor, gave up valuable app development time to review my work. I would also like to thank all of the other editorial and production staff that put many hours into this project to help get it to print. Finally, I would like to thank Jeff LaMarche for providing me with insight into writing a book from a software developer ’ s perspective, which gave me the courage to move forward with the project. I cannot thank my wife, Cheryl, and my stepdaughter, Morgan, enough for putting up with my fi ts, general crankiness, and lack of time for fun family activities as I worked my way through writing this book. Your patience with me is astounding. I want to thank my Mom for introducing me to computers at a very young age and teaching me the basics. And fi nally, I want to thank my Dad for pushing me to work hard and for showing me how to be a father. ffirs.indd xiiiffirs.indd xiii 9/17/10 6:52:58 PM9/17/10 6:52:58 PM ffirs.indd xivffirs.indd xiv 9/17/10 6:52:58 PM9/17/10 6:52:58 PM CONTENTS INTRODUCTION xxiii PART I: MANIPULATING AND DISPLAYING DATA ON THE IPHONE AND IPAD CHAPTER 1: INTRODUCING DATA-DRIVEN APPLICATIONS 3 Building a Simple Data-Driven Application 3 Creating the Project 4 Adding a UITableView 6 Model-View-Controller Architecture 6 Adding the TableView Programmatically 7 Retrieving Data 8 Implementing Your Data Model Class 9 Displaying the Data 12 Protocols 12 Implementing the UITableViewDataSource Protocol 13 Delegates 15 Finishing Up 15 Further Exploration 17 Design Patterns 17 Reading a Text File 18 Moving Forward 18 CHAPTER 2: THE IPHONE AND IPAD DATABASE: SQLITE 19 What Is SQLite? 20 The SQLite Library 20 SQLite and Core Data 20 Building a Simple Database 21 Designing the Database 22 Creating the Database 24 Populating the Database 26 Creating Records with the INSERT Command 26 Reading Your Rows with the SELECT Command 28 Tools to Visualize the SQLite Database 31 TOC.indd xvTOC.indd xv 9/17/10 6:54:24 PM9/17/10 6:54:24 PM CONTENTS xvi Connecting to Your Database 33 Starting the Project 34 The UINavigationController 34 The UITableViewController 35 The Model Class 36 The DBAccess Class 37 Parameterized Queries 47 Writing to the Database 49 Displaying the Catalog 50 Viewing Product Details 52 Moving Forward 55 CHAPTER 3: DISPLAYING YOUR DATA: THE UITABLEVIEW 57 Customizing the TableView 57 TableViewCell Styles 58 Adding Subviews to the contentView 61 Subclassing UITableViewCell 65 Getting Started 66 Implementing drawRect: 69 Finishing Up 71 Implementing Sections and an Index 72 Implementing Search 78 Optimizing TableView Performance 85 Reusing Existing Cells 85 Opaque Subviews 86 Custom Drawn Cells with drawRect 88 UI Conventions for Accessory Views 88 Moving Forward 88 CHAPTER 4: IPAD INTERFACE ELEMENTS 89 Displaying Master/Detail Data with the UISplitViewController 89 Introducing the UISplitViewController 90 The UISplitViewControllerDelegate Protocol 92 Starting the Split View Sample Application 93 Building the Detail Interface 95 Implementing Save and Master/Detail View 97 Setting Up the DetailViewController 97 Changes to the RootViewController 99 Modify the TableView Methods 100 Adding Surveys 101 TOC.indd xviTOC.indd xvi 9/17/10 6:54:25 PM9/17/10 6:54:25 PM CONTENTS xvii Displaying Data in a Popover 103 Building the InfoViewController 104 Displaying the UIPopoverController 107 Gesture Recognizers 110 The UIGestureRecognizer Class 110 Using Gesture Recognizers 111 File Sharing Support 115 Enable File Sharing in the Sample Application 115 Serializing the Survey Data Array 115 Deserializing and Loading the Survey Data Array 117 Sharing the Data 118 Moving Forward 119 PART II: MANAGING YOUR DATA WITH CORE DATA CHAPTER 5: INTRODUCING CORE DATA 123 The Basics of Core Data 124 The Core Data Architecture 124 The Core Data Stack 124 The Data Store 125 The Persistent Store Coordinator 125 The Managed Object Model 126 The Managed Object Context 126 SQLite and Core Data 127 Using Core Data: A Simple Task Manager 127 Creating the Project 127 Examining the Template Code 128 TasksAppDelegate 128 The Data Model 131 RootViewController 132 Modifying the Template Code 137 Moving Forward 143 CHAPTER 6: MODELING DATA IN XCODE 145 Modeling Your Data 145 Defi ning Entities and Their Attributes 146 Entity Details 147 Adding Attributes 149 Adding Relationships Between Entities 150 TOC.indd xviiTOC.indd xvii 9/17/10 6:54:25 PM9/17/10 6:54:25 PM CONTENTS xviii Creating Fetched Properties and Fetch Request Templates 153 Fetched Properties 153 Fetch Request Templates 155 Creating Custom NSManagedObject Subclasses 155 Implementing Validation Rules 158 Implementing Default Values 159 Creating the Tasks Model 159 Moving Forward 161 CHAPTER 7: BUILDING A CORE DATA APPLICATION 163 The Tasks Application Architecture 163 The Data Model 164 The Class Model 164 The User Interface 165 Coding the Application 167 RootViewController and the Basic UI 167 Generating the Managed Object Subclasses 171 Adding and Viewing Tasks 172 Building the ViewTaskController 173 Changes to the RootViewController 178 Building the Editing Controllers 180 Editing Text with the EditTextController 181 Setting Priorities with the EditPriorityController 185 Adding and Editing Locations with the EditLocationController 189 Modifying Dates with the EditDateController 195 Finishing Up the Editing Controllers 199 Displaying Results in the RootViewController 203 Sorting Results with NSSortDescriptor 203 Filtering Results with NSPredicate 204 Generating Grouped Tables Using the NSFetchedResultsController 205 Implementing Custom Managed Objects 211 Coding a Dynamic Property 211 Defaulting Data at Runtime 212 Validating a Single Field 213 Multi-Field Validation 215 Moving Forward 217 CHAPTER 8: CORE DATA–RELATED COCOA FEATURES 219 Key-Value Coding 220 Keys and Keypaths 220 Setting Values Using Keys 221 TOC.indd xviiiTOC.indd xviii 9/17/10 6:54:26 PM9/17/10 6:54:26 PM . Property 21 1 Defaulting Data at Runtime 21 2 Validating a Single Field 21 3 Multi-Field Validation 21 5 Moving Forward 21 7 CHAPTER 8: CORE DATA–RELATED COCOA FEATURES 21 9 Key-Value Coding 22 0 Keys. 2: THE IPHONE AND IPAD DATABASE: SQLITE 19 What Is SQLite? 20 The SQLite Library 20 SQLite and Core Data 20 Building a Simple Database 21 Designing the Database 22 Creating the Database 24 Populating. Coordinator 125 The Managed Object Model 126 The Managed Object Context 126 SQLite and Core Data 127 Using Core Data: A Simple Task Manager 127 Creating the Project 127 Examining the Template Code 128 TasksAppDelegate