Core Data iOS Essentials - Bintu Harwani - E-Book

Core Data iOS Essentials E-Book

Bintu Harwani

0,0
34,79 €

-100%
Sammeln Sie Punkte in unserem Gutscheinprogramm und kaufen Sie E-Books und Hörbücher mit bis zu 100% Rabatt.
Mehr erfahren.
Beschreibung

Core Data is the essential ingredient in data driven iOS apps. It's used for storing, retrieving, and manipulating application data in databases, XML, and binary formats. It's an essential component for iPhone, iPod Touch, and iPad apps.Core Data Essentials provides a clear, readable guide to the most useful aspects of Core Data. Built around a realistic example app, the book showcases the most important aspects of Core Data development in the context of a complete, functioning app written in Objective C.The book starts with a tour of how the app works. Then you'll see how to easily display data using the Table View. You'll learn how to develop an appropriate data model that fits the needs of your app, then implement that model as updatable data objects. You'll see how to update data and build relationships between objects and learn how Core Data can work with search, and how to provide your users with friendly data editing features.

Das E-Book können Sie in Legimi-Apps oder einer beliebigen App lesen, die das folgende Format unterstützen:

EPUB
MOBI

Seitenzahl: 373

Veröffentlichungsjahr: 2011

Bewertungen
0,0
0
0
0
0
0
Mehr Informationen
Mehr Informationen
Legimi prüft nicht, ob Rezensionen von Nutzern stammen, die den betreffenden Titel tatsächlich gekauft oder gelesen/gehört haben. Wir entfernen aber gefälschte Rezensionen.



Table of Contents

Core Data iOS Essentials
Credits
About the Author
Acknowledgement
About the Reviewers
www.PacktPub.com
Support files, eBooks, discount offers, and more
Why Subscribe?
Free Access for Packt account holders
Preface
What this book covers
What you need for this book
Who this book is for
Conventions
Reader feedback
Customer support
Downloading the example code
Errata
Piracy
Questions
1. Overview
Prerequisite
A brief history
Enterprise Object Framework (EOF)
Core Data
Why use Xcode?
Source code
Shall we begin?
2. Understanding Core Data
Core Data
Core Data features
Data Model
Entities
Properties
Attributes
Relationships
Inverse relationship
Model View Controller (MVC)
Core Data API
Persistent Store
Persistent Store Coordinator
FetchRequest
FetchedResultsController
Overview of the application: Sales Record System for a Departmental Store
Entity Relationship Diagram
An application output sample
Entering Master Product Information
Modifying the Master Product
Deleting the Master Product
Entering customer information and order details
Deleting customer information
Searching for specific customers
Searching and modifying customer information
Entering Customer Sales Information
Automatic Master Product Update
Summary
3. Understanding Objective-C Protocol and Table View
Protocol
Implementing the Strategy pattern
Defining the protocol
Creating a delegate property
Declaring protocol methods
Creating a sample application using a protocol and a delegate
Adding the ViewController class for entering numerical values
Defining the protocol, outlets, and action methods in the SecondViewController.h header file
Defining the SecondViewController class and connecting controls
Invoking delegate methods from the SecondViewController.m implementation file
Declaring the delegate, outlet, and action methods in the demodelegateViewController.h header file
Defining the demodelegateViewController and connecting controls
Implementing the protocol methods in the demodelegateViewController.m file
Running the project
Introduction to Table View
Creating an application to display Table View cells
Declaring an array in the header file
Implementing UITableViewDataSource protocol methods
Adding names to the Table View
Adding the AddNameController View controller
Defining protocols, outlets, and action methods in the AddNameController.h header file
Defining the AddNameController class View and connecting controls
Invoking Delegate methods in the AddNameController.m implementation file
Invoking the AddNameController View and implementing the protocol methods
Placing and connecting the Bar Button Item control in the RootViewController
Summary
4. Designing a Data Model and Building Data Objects for Customers
Creating a new project
Designing the data model
Data Model Editor
Adding an entity
Adding an attribute property
Types of attributes
Fields applying constraints
Building data objects for the Customer entity
Understanding code of autogenerated files
Header file of Application Delegate
Implementation file of Application Delegate
applicationWillTerminate method
managedObjectContext method
managedObjectModel method
persistentStoreCoordinator method
applicationDocumentsDirectory method
Summary
5. Creating, Listing, and Deleting Names of Customers
Splitting the task into two modules
Creating a module to save and delete a customer's name
Using the ViewController class for adding the name of the customer
Defining protocol, outlets, and action methods in the header file
Defining the View of the AddNameController class and connecting controls
Invoking delegate methods from the implementation file
Declaring delegate and implementing methods for storing the name of the customers
Key value coding (KVC)
Key value methods
The -valueForKey: method
The -setValue:forKey: method
Keypath
Implementing the methods of the NSFetchedResultsControllerDelegate protocol
The controllerWillChangeContent method
The controllerDidChangeContent method
The controller:didChangeObject method
The controller:didChangeSection method
Running the project
Summary
6. Creating, Listing, Displaying, and Deleting Records of Customers
Understanding multiple managed object context
NSNotification
Applying the concept of multiple managed object context in our application
Enhancing our application to save, list, display, and delete customer information
Adding the ViewController class
Defining a View for entering the customer's information and connecting controls
Coding in the implementation file for accepting the customer's information and invoking delegate methods
Adding the View Controller class for displaying the customer's information
Defining the View and writing the code in the implementation file for displaying the customer's information
Implementing the methods in the RootViewController class for storing the customer's information
viewDidLoad method
cell AtIndexPath method
didSelectRowAtIndexPath method
addCustomer method
addcustomerController method
Viewing the project
Summary
7. Updating and Searching Records of Customers
Applying the update feature
Defining a protocol in the DisplayCustomerController class
Adding Edit button to enable modifications in the View of DisplayCustomerController class
Implementing the protocol's method for storing modified customer information
Using KVO to know what has been updated
Running the project
Applying search facility
Defining outlet of UISearchBar class in the header file of the RootViewController class
Placing the Search Bar control in the View of RootViewController and specifying its delegate
Implementing delegate method in the RootViewController class to apply searching
Understanding NSPredicate
Removing the keyboard after selecting a customer's name
Using Predicate Builder for creating a search criterion
Fetched properties
Fetch request templates
Building and accessing a fetch request without a variable
Building and accessing a fetch request with a variable
Summary
8. Entering, Saving, Listing, and Deleting the Records of the Products Sold to the Customers
Adding the product entity to the Data Model
Relationship
Types of relationships
One to one relationship
One to many relationship
Many to many relationship
Establishing a relationship between the Customer and the Product entities
Setting a relationship from the Customer entity to the Product entity
Delete rule
Setting a relationship from the Product entity to the Customer entity (inverse relationship)
Building the data object for the Customer and the Product entities
Understanding the role of the auto generated special methods of a relationship
Entering the information of the products sold to the customers
Creating a module to develop an interface to enter the product information
Adding a ViewController class for entering the information of the products sold to the customers
Defining the protocol, outlets, and action methods in the header file
Designing the View of the AddProductController class and connecting the controls
Invoking the delegate methods from the implementation file
Developing a module to create a menu for manipulating the product information
Adding a ViewController class to display the Product's menu to manipulate the product's information
Defining the outlets and action methods in the header file
Designing the View of a ProductInfoController class and connecting the controls
Coding in the implementation file to save, edit, and display the product's information
Creating a module to connect the Product's menu to the rest of the project
Defining the outlets and action methods in the header file
Adding a Toolbar control to the View of the DisplayCustomerController class
Coding in the implementation file to invoke the View of the ProductInfoController class
Running the project
Summary
9. Entering, Displaying, and Deleting the Stock
Adding the MasterProduct entity to the Data Model
Storing the image of the MasterProduct
Transformable data type
The Value Transformer Name: field
Creating a value transformer
Building the data object for the MasterProduct entity
Maintaining the MasterProduct information
Image Picker
Adding custom images to the Image Picker
Making an image appear within a given size
Module to develop interface to enter the information of the MasterProduct
Adding the ViewController class for entering information of the master products
Defining protocol, outlets, and action methods in the header file
Designing the View of the MasterProductController class and connecting controls
Invoking the delegate and ImagePicker methods from the implementation file
Module to create a menu for manipulating the MasterProduct information
Adding the View Controller class to display a menu for adding, editing, and displaying the MasterProducts
Defining the outlets and action methods in the header file
Designing the View of the MasterProductInfoController class and connecting controls
Coding in the implementation file to save, edit, and display the master product's information
Summary
10. Editing the Stock Information
Module to connect the MasterProduct's menu to the rest of the project
Defining outlets and action methods in the header file
Adding a Toolbar and a Bar Button Item in the RootViewController class
Coding in the implementation file to invoke the View of the MasterProductinfoController class
Making the Toolbar to appear at the bottom of the View
Running the application
Selecting the image of the master product
Deleting the master product
Module to modify the information of the master product
Adding the View Controller class to display the view to modify the selected master product
Defining the outlets and action methods in the header file
Designing the View of EditMasterProductController class
Coding in the implementation file to modify the master product's information
Importing the delegate and the View Controller class in the header file
Coding in the implementation file to invoke the View of the EditMasterProductController class
Summary
11. Displaying the Products for Sale and Updating the Stock
Displaying the products available for sale
Adding the SearchProductController class
Designing the view of SearchProductController
Coding in the SearchProductController class
Invoking the SearchProductController from the Product menu
Displaying name, price, and image of the selected product
Updating the stock
Running the project
Automatically updating the quantity of the product in the MasterProduct entity
Versioning
Creating a new Data Model version
Migrations
Implementing lightweight migration to our application
Summary
A. Appendix
Index

Core Data iOS Essentials

Core Data iOS Essentials

Copyright © 2011 Packt Publishing

All rights reserved. No part of this book may be reproduced, stored in a retrieval system, or transmitted in any form or by any means, without the prior written permission of the publisher, except in the case of brief quotations embedded in critical articles or reviews.

Every effort has been made in the preparation of this book to ensure the accuracy of the information presented. However, the information contained in this book is sold without warranty, either express or implied. Neither the author, nor Packt Publishing, and its dealers and distributors will be held liable for any damages caused or alleged to be caused directly or indirectly by this book.

Packt Publishing has endeavored to provide trademark information about all of the companies and products mentioned in this book by the appropriate use of capitals. However, Packt Publishing cannot guarantee the accuracy of this information.

First published: April 2011

Production Reference: 1180411

Published by Packt Publishing Ltd. 32 Lincoln Road Olton Birmingham, B27 6PA, UK.

ISBN 978-1-849690-94-2

www.packtpub.com

Cover Image by Asher ( <[email protected]> )

Credits

Author

B.M. Harwani

Reviewers

Fred McCann

Muhammad Adil

Acquisition Editor

David Barnes

Development Editor

Chris Rodrigues

Technical Editor

Aditi Suvarna

Copy Editor

Laxmi Subramanian

Indexer

Monica Ajmera Mehta

Rekha Nair

Editorial Team Leader

Aditya Belpathak

Vinodhan Nair

Project Team Leader

Lata Basantani

Project Coordinator

Vishal Bodwani

Proofreader

Aaron Nash

Graphics

Geetanjali Sawant

Production Coordinator

Alwin Roy

Cover Work

Alwin Roy

About the Author

B.M. Harwani is the founder and owner of Microchip Computer Education (MCE), based in Ajmer, India that provides computer education in all programming and web developing platforms. He graduated with a B.E. in computer engineering from the University of Pune, and also has a 'C' Level (Master's diploma in computer technology) from DOEACC, Government Of India. Having been involved in the teaching field for over 16 years, he has developed the art of explaining even the most complicated topics in a straightforward and easily understandable fashion. He has written several books on various subjects that include JSP, JSF, EJB, PHP, .NET, Joomla, jQuery, and Smartphones. He also writes articles on a variety of computer subjects, which can be seen on a number of websites. To know more, visit his blog, http://bmharwani.com/blog.

The list of books written by B.M. Harwani are Programming & Problem Solving through C (BPB, 2004), Learn Tally in Just Three Weeks (Pragya, 2005), Data Structures and Algorithms through C (CBC, 2006), Master Unix Shell Programming (CBC, 2006), Business Systems (CBC, 2006), Practical Java Projects (Shroff, 2007), Practical Web Services (Shroff, 2007), Java for Professionals (Shroff, 2008), C++ for Beginners (Shroff, 2009), Practical ASP.NET 3.5 Projects (Shroff, 2009), Java Server Faces—A Practical Approach for Beginners (PHI Learning, 2009), Practical JSF Project using NetBeans (PHI Learning, 2009), Foundation Joomla (Friends of ED, 2009), Practical EJB Projects (Shroff, 2009), Data Structures and Algorithms in C++ (Dreamtech Press, 2010), Developing Web Applications in PHP and AJAX (Tata McGraw Hill, 2010), and jQuery Recipes (Apress, 2010).

Acknowledgement

I owe a debt of gratitude to David Barnes, the Senior Acquisition Editor at Packt Publishing for his initial acceptance and giving me an opportunity to create this work. I am highly grateful to the whole team at Packt Publishing for their constant cooperation and contribution to create this book.

My gratitude to Chris Rodrigues, who as a Development Editor offered a significant amount of feedback that helped to improve the chapters. He played a vital role in improving the structure and the quality of information.

I must thank Muhammad Adil, the Technical Reviewer for his excellent, detailed reviewing of the work and the many helpful comments and suggestions he made.

Special thanks to Aditi Suvarna, the Technical Editor for first class structural and language editing. I appreciate her efforts in enhancing the contents of the book and giving it a polished look.

I also thank Alwin Roy, the Production Coordinator for doing excellent formatting and making the book dramatically better.

A big and ongoing thanks to Vishal Bodwani, the Project Coordinator for doing a great job and sincere efforts by the whole team to get the book published on time.

A great big thank you to the editorial and production staff and the entire team at Packt, who worked tirelessly to produce this book. I really enjoyed working with each one of you.

I am also thankful to my family—my small world; Anushka (my wife) and my two little darlings, Chirag and Naman for allowing me to work on the book even during the time that I was supposed to spend with them.

I should not forget to thank my dear students who have been a good teacher for me as they make me understand what basic problems they do face in a subject and enable me to directly hit at those topics. It is because of the endless interesting queries of my students that help me in writing the books with a practical approach.

About the Reviewers

Fred McCann is a co-founder of Zumisoft, an independent Mac software company. He started writing code at the tender age of eight on a TI-99a home computer and has since moved on to newer systems. His interests, outside of programming, include Judo, Yoga, Hiking, Kites, Amateur Robotics, Politics, and Meditation.

His websites include http://www.duckrowing.com/ and http://www.fredmccann.com/Home.html.

Muhammad Adil graduated from the National University of Computer and Emerging Sciences in Pakistan, with a Bachelor's degree in Computer Science. He was a very active Freelance Software developer during his university years. So, after graduating, he kept working as a Freelance developer and has been working as an iOS developer for the past one and a half years.

www.PacktPub.com

Support files, eBooks, discount offers, and more

You might want to visit www.PacktPub.com for support files and downloads related to your book.

Did you know that Packt offers eBook versions of every book published, with PDF and ePub files available? You can upgrade to the eBook version at www.PacktPub.com and as a print book customer, you are entitled to a discount on the eBook copy. Get in touch with us at <[email protected]> for more details.

At www.PacktPub.com, you can also read a collection of free technical articles, sign up for a range of free newsletters and receive exclusive discounts and offers on Packt books and eBooks.

http://PacktLib.PacktPub.com

Do you need instant solutions to your IT questions? PacktLib is Packt's online digital book library. Here, you can access, read, and search across Packt's entire library of books.

Why Subscribe?

Fully searchable across every book published by PacktCopy and paste, print and bookmark contentOn demand and accessible via web browser

Free Access for Packt account holders

If you have an account with Packt at www.PacktPub.com, you can use this to access PacktLib today and view nine entirely free books. Simply use your login credentials for immediate access.

This book is dedicated to my mother Mrs. Nita Harwani and Mark Zuckerberg.

My mother is next to God for me and whatever I am today is because of the moral values taught by her.

It is because of Mark Zuckerberg's amazing development; Facebook that I could meet my school and Engineering college friends after a long break of 18 years.

Preface

Since its invention, iPhone has been inspiring developers around the world to develop applications for it. Several applications can be built for iPhone, which include Web applications, Native iPhone applications, Games, Weather, News applications, Data driven applications, and so on.

Looking at the huge demand of developing data applications for iPhone inspired me to write a book on Core Data—a perfect framework for developing data-driven applications for iPhone. In this book, I have tried my level best to keep the code simple and easy to understand. I have provided step-wise instructions with screenshots at each step. Feel free to contact me at <[email protected]> for any queries. Any suggestions for improving the book will be highly appreciated.

What this book covers

In Chapter 1, Overview, you will see a brief history of the Core Data and a small introduction to EOF and Xcode.

In Chapter 2, Understanding Core Data, you will have an introduction to the Core Data framework and its features. You will learn about the data model and how it defines the structure of data in terms of entities, properties, and their relationships. Also, you will get a brief idea of Model View Controller (MVC), the Core Data API and its main components. Besides this, the chapter includes an overview of the application (Sales Record System for a Store), which we will be building in the book along with its different views and the tasks performed when different controls in these views are selected.

Chapter 3, Understanding Objective-C Protocol and Table View, explains how an object collaborates with other objects through the delegation pattern. We will learn about the working of a protocol, that is, how a protocol and its methods are defined. We will also learn how an object adopts a protocol to act as a delegate and how a protocol establishes a contract for communication between two objects.

Chapter 4, Designing a Data Model and Building Data Objects for Customers, introduces the working of UITableView and explains step-by-step how information is displayed via the table view. The chapter explains the different methods used in displaying information through table view and also how to add more information to the existing information being displayed via table view. For instance, if four names are already being displayed in a table, this chapter will show how to add the newly entered name to the existing list of names in the table.

In Chapter 5, Creating, Listing, and Deleting Names of Customers, we will be learning how to design a data model for storing any customer's information, that is, we will define the Customer entity and its attributes. Also, we will learn to build the data object (classes) associated with the Customer entity.

Chapter 6, Creating, Listing, Displaying, and Deleting Records of Customers, focuses on explaining how a customer's information, which is stored in the Customer entity, is maintained. The chapter gives a step-by-step explanation of how to save, display, and delete the customer information that comprises customer's name, e-mail address, and contact number.

In Chapter 7, Updating and Searching Records of Customers, we will see how to modify the customer information, which is, unlike the "editing" feature in Chapter 6 that was limited to the deletion of a record; we will see how to update (modify) the information of the existing customers. The chapter explains the procedure to add an Edit button to the view, which when selected will allow us to edit the information of the selected customer. This chapter also covers how to save the modified information back to the persistent store. In this chapter, we will also learn the application of NSPredicate to apply query facility to locate the desired customer quickly.

Chapter 8, Entering, Saving, Listing, and Deleting the Records of the Products Sold to the Customers, explains how to store the information of the products purchased by different customers, we will learn to add the Product entity to our existing data model and we will see how the relationship is established from the Customer entity to the Product entity. The chapter also explains how the inverse relationship is set from the Product entity to the Customer entity and finally, the procedure of building data objects for the modified data model. Also, we will learn how to maintain the product's information, that is, how to enter, save, display, and edit the information of the products that are sold to different customers. We will learn how to develop a view to enter the product's information, develop a product's menu to add, edit, and display the products sold to the selected customer and finally, to connect the product's menu to the rest of the application.

Chapter 9, Entering, Displaying, and Deleting the Stock, covers the creation of a Master Product entity, which will be used for storing the information of products that the vendor is dealing with. All the products available for sale are stored in this table. In order to store the image of the product, the chapter explains the concept of transformable data type that is used for creating custom data types. The chapter also explains how to enter, save, display, delete, and modify the information of the master products that the vendor deals with. It also covers the working of the Image Picker control—how it is used in selecting images of the products and the different methods to define the size of the image of the product. In all, the chapter explains how to develop a view to enter master product's information, develop a menu to add, delete, and display information of master products for the MasterProduct.

Note

The information of the products entered in the MasterProduct entity is very different from the information of the product entered in the Product entity. The Product entity stores the information of the products that are sold to the customers, whereas the MasterProduct entity refers to the products that are available for sale.

Chapter 10, Editing the Stock Information, explains how to connect the menu meant for adding, deleting, and displaying the Master Product information to the rest of the application. Also, the chapter covers the step-by-step approach to develop a view to display and modify the selected master product's information.

In Chapter 11, Displaying the Products for Sale and Updating the Stock, we will learn how to implement query facility while entering the information of the products sold to the selected customer. Also, we will see how the quantity of the master product gets automatically reduced by the amount of quantity sold to the selected customer.

Appendix, Appendix, will give you a brief idea about the topics covered in this book.

What you need for this book

This book assumes that you have an Intel-based Macintosh running Snow Leopard (Mac OS X 10.6.2 or later). Why Snow Leopard? There are many new features in Xcode that are available only on Snow Leopard. Therefore, I highly recommend upgrading to Snow Leopard, if you are using an earlier release. We will be using Xcode, an integrated development environment used for creating applications for iPad, iPhone, core data, and other Mac applications. So, download the latest version of Xcode from the following link: http://developer.apple.com/technologies/xcode.html.

The latest version of Xcode that is available at the time of this writing is Xcode 3.2.5. I have used the same version for developing the core data application in this book.

Who this book is for

This book is mainly written for those who are familiar with iPhone SDK programming and are interested in developing data-driven applications using Core Data. For understanding the concept of Core Data better, knowledge of Objective C protocol and delegation pattern is required. Besides this, familiarity with the data source patterns, such as UITableView and UITableViewDataSource, for the purpose of displaying information is also required. But never mind if you are not aware of these two concepts, Chapters 3 and 4 of the book are focused on getting you acquainted with them.

Reader feedback

Feedback from our readers is always welcome. Let us know what you think about this book—what you liked or may have disliked. Reader feedback is important for us to develop titles that you really get the most out of.

To send us general feedback, simply send an e-mail to <[email protected]>, and mention the book title via the subject of your message.

If there is a book that you need and would like to see us publish, please send us a note in the SUGGEST A TITLE form on www.packtpub.com or e-mail <[email protected]>.

If there is a topic that you have expertise in and you are interested in either writing or contributing to a book, see our' author guide on www.packtpub.com/authors.

Customer support

Now that you are the proud owner of a Packt book, we have a number of things to help you to get the most from your purchase.

Downloading the example code

You can download the example code files for all Packt books you have purchased from your account at http://www.PacktPub.com. If you purchased this book elsewhere, you can visit http://www.PacktPub.com/support and register to have the files e-mailed directly to you.

Errata

Although we have taken every care to ensure the accuracy of our content, mistakes do happen. If you find a mistake in one of our books—maybe a mistake in the text or the code—we would be grateful if you would report this to us. By doing so, you can save other readers from frustration and help us improve subsequent versions of this book. If you find any errata, please report them by visiting http://www.packtpub.com/support, selecting your book, clicking on the errata submission form link, and entering the details of your errata. Once your errata are verified, your submission will be accepted and the errata will be uploaded on our website, or added to any list of existing errata, under the Errata section of that title. Any existing errata can be viewed by selecting your title from http://www.packtpub.com/support.

Piracy

Piracy of copyright material on the Internet is an ongoing problem across all media. At Packt, we take the protection of our copyright and licenses very seriously. If you come across any illegal copies of our works, in any form, on the Internet, please provide us with the location address or website name immediately so that we can pursue a remedy.

Please contact us at <[email protected]> with a link to the suspected pirated material.

We appreciate your help in protecting our authors, and our ability to bring you valuable content.

Questions

You can contact us at <[email protected]> if you are having a problem with any aspect of the book, and we will do our best to address it.

Chapter 1. Overview

This book is a practical guide to help you in developing Data-Driven iPhone applications using Core Data. The tremendous success of iPhone has increased the demand of mobile applications. Besides the Game-based applications, there is a huge market for the data-driven mobile applications too. The focus of this book is to make you understand how the Core Data, Apple's persistence framework, is used for developing data-driven mobile applications.

Prerequisite

This book assumes that you have a basic understanding of the iPhone SDK and you also know the basics of iPhone SDK programming.

To better understand the concept of Core Data, you should:

Have a good understanding of the Objective-C protocol and the delegation patternBe familiar with data source patterns, such as UITableView and UITableViewDataSource, for the purpose of displaying information

Even if you're not aware of these two concepts, Chapter 3, Understanding Objective-C Protocol and Table View and Chapter 4, Designing a Data Model and Building Data Objects for Customers of the book are focused to get you acquainted with them. That is why the two chapters are self-contained and each chapter presents an individual application.

A brief history

The iPhone as we all know is an integrated cellular telephone and media player developed and marketed by Apple. It has become very popular in the past few years because of its amazing features. Looking at its huge number of users, developers around the world are attracted to develop applications for this unique device. Developers realized that besides games, there is a huge market of data applications for iPhone device. The attraction of creating data applications for iPhone device resulted into development of the Core Data framework. But the question is where did Core Data come from?

Core Data was first developed at NeXT Computer as the DBKit framework in 1992, which then became the Enterprise Object Framework (EOF) in 1994.

Enterprise Object Framework (EOF)

EOF is an object-relational mapping (ORM) framework that provides a mechanism for accessing the data as an object-oriented class structure. It is well-designed and encourages Model View Controller (MVC) design patterns. It also simplifies the tedious job of creating an application's data model. EOF is not just a framework, it is also a tool that helps in creating the application's data model visually—the task that was previously done by creating Objective-C classes. Besides this, the framework handles all the work involved in persisting the data to a SQL database, flat file, or any other data store. Based on object-oriented architecture, EOF is very flexible to use too. The roots of the Core Data framework come from the Enterprise Objects Framework (EOF).

Core Data

Core Data is part of the Cocoa API in Mac OS X first introduced with Mac OS X 10.4 Tiger and for the iOS with iPhone SDK 3.0. It is a powerful data model framework that was specifically designed to provide local data storage for Cocoa applications. The modeling functionality of Core Data is integrated right into XCode, so there's no need to switch back and forth between the IDE and modeler. With interface builder, it allows developers to quickly create a user interface (known as the views of the application in MVC terminology) without writing a single line of code. It is also the most effective solution to data persistence and allows us to persist our data to any number of different storage mediums, which includes storing data as XML, in binary files, or in an embedded SQLite database. The data modeling tool of Xcode allows us to define our application's data model graphically, which can be easily accessed through code. Instances of the entities defined in the data model are then managed by the Core Data framework and stored to a storage medium such as an XML file or SQLite database.

Now the question arises, what is Xcode and why we are using it for developing Core Data applications?

Why use Xcode?

Xcode is Apple's most comprehensive Software Development Kit (SDK), and it provides an environment for developing the applications for iPhone. It is a highly customizable integrated development environment (IDE) that includes compilers and applications, together with an extensive set of programming libraries and interfaces. It is a powerful source editor and a graphic debugger too. While developing applications with XCode, it gives us an option to enable a checkbox for enabling Core Data support. On selecting the checkbox, Xcode automatically creates code for us that make the task of developing core data applications quite easy.

Source code

The source code of the book is available at the URL specified in the Preface of the book.

You'll find chapter-wise code bundle in the ZIP file. The book is so organized that it guides you to develop a data-drive application step-by-step. That is, by the end of the book, you'll be having a complete data-driven running application with you. In case, you want to run the end product directly, follow the below given steps:

Unzip the source bundle of the last chapter, Chapter 11, Displaying the Products for Sale and Updating the Stock on your local Mac. Open Xcode, go to File | Open from the menu, and browse to the unzipped bundle of Chapter 11, Displaying the Products for Sale and Updating the Stock. In the prob folder, select the prob.xcodeproj file followed by clicking on the Open button. Select the Build and Run icon from the Xcode project window to run the application. You'll get the main view of the application as shown in the following image. But the application is not yet ready to run until we define the photos of the master products (products that we are going to sell through application). To define photos of the master products in iPhone Simulator, go to Home and then click on the Photos icon (refer to the given image (a)). We get the Albums page as shown in image (b). Because we have not created any photo album yet, the figure displays the message, No Photos. Drag the first image, IMG_0000.JPG provided in the code bundle of Chapter 11, Displaying the Products for Sale and Updating the Stock onto the simulator screen. Tap on the image and hold down the mouse on the image until the popover comes up, as shown in image (c). Click on the Save Image button to save the image. Repeat the procedure for the other three images (IMG_0001.JPG, IMG_0002.JPG, IMG_0003.JPG). After saving the four images, the simulator will display the images as shown in image (a). On clicking back to Photos, we find that an album Saved Photos appears with one of the images considered as the icon of the photo album (image (b)). The number (4) in parenthesis represents that there are four images in this photo album. Now, our application is completely ready for execution. For any guidance regarding operating the application, refer to the An application output sample section in Chapter 2,

Shall we begin?

After following how our book will proceed, let us now get ready to dive in. Get ready for the introduction of Core Data and the step-by-step journey to understand its different concepts and applying them practically in developing a data-driven mobile application.

Chapter 2. Understanding Core Data

In this book, we'll learn how to build a Sales Record Keeping System application using Core Data through a step-by-step approach. So, this chapter will give us an introduction to the following topics:

Core Data framework and its featuresThe data model and how it defines the structure of data in terms of entities, properties, and their relationshipsModel-View-Controller (MVC)Core Data API and its main componentsAn overview of the application that we will be building in this book and a glance at the different application views and the tasks performed when different controls in these views are selected

Core Data

Core Data is Apple's persistence framework, which is used to persist—store our application's data in a persistent store, which may be memory or a flat file database. It helps us represent our data model in terms of an object graph, establish relationships among objects, and it can also store object graphs on the disk. It also allows us to use the entities of our data model in the form of objects, that is, it maps our data into a form that can be easily stored in a database, such as SQLite, or into a flat file. Also, the Core Data reduces a lot of coding. On using Xcode's templates for Core Data applications, we automatically get the boilerplate code that does several complex tasks such as generating XML files, binary files, SQLite files automatically for us without writing a single code, allowing us to focus on the business logic of our application.

Besides this, Core Data also provides several features that are required in data manipulation, which includes filtering data, querying data, sorting data, establishing relationships with other data, and persisting data in different repositories.

Core Data features

The Core Data framework provides lots of features that include the following:

Supports migrating and versioning: It means we can modify our data model, that is, entities of the application, whenever desired. The Core Data will replace the older persistent store with the revised data model. This concept is nicely explained with figures in Chapter 11,Supports Key-Value Coding (KVC): It is used to store and retrieve data from the managed objects. Core Data provides the methods required for setting and retrieving attribute values from the managed object, respectively. We will be using this feature in our application to display the information of customers and the products sold to them through the table view.Tracks the modifications: Core Data keeps track of the modifications performed on managed objects thus allowing us to undo any changes if required. We will be using this feature in our application while modifying the information of a customer or product to know what the earlier value was and what the new value entered for it is.Supports lazy loading: It's a situation that arises when all the property values of a managed object are not loaded from the data store and the property values are accessed by the application. In such situations, faulting occurs and the data is retrieved from the store automatically.Efficient database retrievals: Core Data queries are optimized for this, though the execution of query is dependent on the data store.Multi-threading: Core Data supports multi-threading in an application, that is, more than one thread can be executed in parallel to increase performance. Even some tasks can be performed in the background using a separate thread.Inverse relationship: Core Data maintains an inverse relationship for consistency. If we add an object to a relationship, Core Data will automatically take care of adding the correct object to the inverse relationship. Also, if we remove an object from a relationship, Core Data will automatically remove it from the inverse relationship. In our application, we will be using an inverse relationship between the Customer and Product entities, so that if a customer is deleted, the information of all the products purchased by him/her should also be automatically deleted.External data repositories: Core Data supports storing objects in external data repositories in different formats.

Data Model

Core Data describes the data in terms of a data model. A data model is used to define the structure of the data in terms of entities, properties, and their relationships.

Entities

Because Core Data maintains data in terms of objects, an entity is an individual data object to represent complete information of the person, item, object, and so on. For example, customer is an entity, which represents information of customers, such as name, address, e-mail ID, contact number, products purchased, date of purchase, and so on. Similarly, the product is an entity, which represents the information of a product, such as name of the product, price, weight, and so on. An entity consists of properties that are a combination of attributes and relationships. An entity in Xcode's Data Model Editor may appear as shown in the following screenshot:

Properties

Properties of an entity give detailed information about it, such as what are its attributes and how it is related to other entities. A property of an entity refers to its attributes and relationships. Attributes are scalar values and relationships are pointers to or collections of other entities at the object level. A property is represented by a name and a type.

Attributes

Attributes are the variables within an object (entity). In fact, a collection of attributes makes an entity. In database language, they are known as columns of the table. For example, the customer's entity may consist of attributes such as name, address, contact number, items purchased, and so on. Similarly, the attributes in the products table may be item code, item name, quantity, and so on. While creating attributes of an entity, we have to specify its name and its data type to declare the kind of information (whether integer, float, string, and so on) that will be stored in the attribute. Also, we can define the constraints on the information that can be stored in the column. For example, we can specify the maximum, minimum value (range) that can be stored in that attribute, or whether the attribute can or cannot store certain special symbols, and so on. Also, we can specify the default value of an attribute.

Relationships

Besides attributes, an entity may also contain relationships (which define how an entity is related to other entities). The attributes and relationships of an entity are collectively known as properties. The relationships are of many types (To-One, To-Many, and Many-to-Many) and play a major role in defining connection among the entities and what will be the impact of insertion or deletion of a row in one entity on the connected entities.

Examples of relationship types:

The relationship from a child entity to a parent entity is a To-One relationship as a child can have only one parentThe relationship from a customer to a product entity is a To-Many relationship as a customer can purchase several productsThe relationship from an employee to a project entity is of Many-to-Many type as several employees can work on one project and an employee can work on several projects simultaneously

Note

To define a many-to-many relationship in Core Data, we have to use two To-many relationships. The first To-many relationship is set from the first entity to the second entity. The second To-many relationship is set from the second entity to the first entity.

In Xcode's Data Model Editor, the relationship from Customer to Product—a To-Many relationship—is represented by a line that appears pointing from the Customer entity to the Product entity with two arrows, (designating a One-to-Many relationship) as shown in the subsequent screenshot, whereas the To-One relationship is represented by a line with a single arrow:

When defining relationships in Core Data we may use inverse relationships, though it's optional.

Inverse relationship

In Core Data, every relationship can have an inverse relationship. Like, if there is a relationship from Customer to Product, there will be a relationship from Product to Customer too. A relationship does not need to be the same kind as its inverse; for example, a To-One relationship can have an inverse relationship of type To-Many. Although relationships are not required to have an inverse, Apple generally recommends that you always create and specify the inverse, (even if you won't need) as it helps Core Data to ensure data integrity.

For example, consider a situation when a Customer entity has a relationship of the To-Many type to a Product entity and some information of a customer is changed or a row of a customer is deleted. Then it will be easier for Core Data to ensure consistency; that is, by inverse relationship, Core Data can automatically find the products related to the deleted customer and hence, delete them too. Inverse relationship is practically used in Chapter 8, Entering, Saving, Listing, and Deleting the Records of the Products Sold to the Customers.

Before we go further, let us have a quick look at the architecture that is used in iPhone application development: MVC.

Model View Controller (MVC)

iPhone application development uses MVC architecture where M stands for Model, V stands for View, and C for Controller.

Model