-
Notifications
You must be signed in to change notification settings - Fork 3
/
listing8.html
executable file
·253 lines (218 loc) · 10.4 KB
/
listing8.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd">
<html>
<head>
<!-- BEGIN META TAG INFO -->
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<link rel="home" href="http://developer.apple.com/">
<link rel="find" href="http://developer.apple.com/search/">
<link rel="stylesheet" type="text/css" href="../../documentation/css/adcstyle.css" title="fonts">
<script language="JavaScript" src="../../documentation/js/adc.js" type="text/javascript"></script>
<!-- END META TAG INFO -->
<!-- BEGIN TITLE -->
<title>Image Kit with Core Data - /ReadMe.txt</title>
<!-- END TITLE -->
<script language="JavaScript">
function JumpToNewPage() {
window.location=document.scpopupmenu.gotop.value;
return true;
}
</script>
</head>
<!-- BEGIN BODY OPEN -->
<body>
<!--END BODY OPEN -->
<!-- START CENTER OPEN -->
<center>
<!-- END CENTER OPEN -->
<!-- BEGIN LOGO AND SEARCH -->
<!--#include virtual="/includes/adcnavbar"-->
<!-- END LOGO AND SEARCH -->
<!-- START BREADCRUMB -->
<div id="breadcrumb">
<table width="680" border="0" cellpadding="0" cellspacing="0">
<tr>
<td scope="row"><img width="340" height="10" src="images/1dot.gif" alt=""></td>
<td><img width="340" height="10" src="images/1dot.gif" alt=""></td>
</tr>
<tr valign="middle">
<td align="left" colspan="2">
<a href="http://developer.apple.com/">ADC Home</a> > <a href="../../referencelibrary/index.html#//apple_ref/doc/uid/TP30000943" target="_top">Reference Library</a> > <a href="../index.html#//apple_ref/doc/uid/TP30000925" target="_top">Sample Code</a> > <a href="../Cocoa/index.html#//apple_ref/doc/uid/TP30000925-TP30000416" target="_top">Cocoa</a> > <a href="../Cocoa/idxDataManagement-date.html#//apple_ref/doc/uid/TP30000925-TP30000416-TP30000445">Data Management</a> > <A HREF="javascript:location.replace('index.html');">Image Kit with Core Data</A> >
</td>
</tr>
<tr>
<td colspan="2" scope="row"><img width="680" height="35" src="images/1dot.gif" alt=""></td>
</tr>
</table>
</div>
<!-- END BREADCRUMB -->
<!-- START MAIN CONTENT -->
<!-- START TITLE GRAPHIC AND INTRO-->
<table width="680" border="0" cellpadding="0" cellspacing="0">
<tr align="left" valign="top">
<td><h1><div id="pagehead">Image Kit with Core Data</div></h1></td>
</tr>
</table>
<!-- END TITLE GRAPHIC AND INTRO -->
<!-- START WIDE COLUMN -->
<table width="680" border="0" cellpadding="0" cellspacing="0">
<tr align="left" valign="top">
<td id="scdetails">
<h2>/ReadMe.txt</h2>
<form name="scpopupmenu" onSubmit="return false;" method=post>
<p><strong>View Source Code:</strong>
<select name="gotop" onChange="JumpToNewPage();" style="width:340px"><option selected value="ingnore">Select File</option>
<option value="listing1.html">/AppDelegate.h</option>
<option value="listing2.html">/AppDelegate.m</option>
<option value="listing3.html">/ImageBrowserViewArrayController.h</option>
<option value="listing4.html">/ImageBrowserViewArrayController.m</option>
<option value="listing5.html">/main.m</option>
<option value="listing6.html">/Person.h</option>
<option value="listing7.html">/Person.m</option>
<option value="listing8.html">/ReadMe.txt</option></select>
</p>
</form>
<p><strong><a href="IKImageBrowserViewWithCoreData.zip">Download Sample</a></strong> (“IKImageBrowserViewWithCoreData.zip”, 70.4K)<BR>
<strong><a href="IKImageBrowserViewWithCoreData.dmg">Download Sample</a></strong> (“IKImageBrowserViewWithCoreData.dmg”, 74.3K)</p>
<!--
<p><strong><a href="#">Download Sample</a></strong> (“filename.sit”, 500K)</p>
-->
</td>
</tr>
<tr>
<td scope="row"><img width="680" height="10" src="images/1dot.gif" alt=""><br>
<img height="1" width="680" src="images/1dot_919699.gif" alt=""><br>
<img width="680" height="20" src="images/1dot.gif" alt=""></td>
</tr>
<tr>
<td scope="row">
<!--googleon: index -->
<pre class="sourcecodebox">ReadMe.txt
IKImageBrowserViewWithCoreData, as the title suggests, shows one approach to
using the browser view from the Image Kit framework with content managed by Core
Data. There are several ways this could be accomplished, but the actual objects
shown in the browser must implement the required methods in the
IKImageBrowserItem informal protocol
(http://developer.apple.com/documentation/GraphicsImaging/Reference/IKImageBrowserItem_Protocol/IKImageBrowserItem_Reference.html).
This sample also shows how to subclass NSArrayController to overcome certain
limitations in how the browser observes its content objects.
Overview:
The application is a very simple form of an address book, in which a gallery of
images is used to browse to locate a person, and the fields below show the
details about the person selected in the browser. "+" and "-" buttons all the
user to add and remove people from the application. The image for the person
must be set using the image well in the bottom right corner. Also, a slider
control allows the user to manipulate the zoom factor of the browser.
Core Data:
The Core Data model for the project contains a single entity, "Person". The
person has a number of string attributes which are not particularly important to
the application. The imageRepresentation attribute, of type binary data, is the
important attribute. The name of the attribute matches the IKImageBrowserItem
method exactly.
Code:
The Person entity has a custom NSManagedObject subclass in order to implement
the other required methods in the IKImageBrowserItem protocol. Since we are
returning binary data for the image, the imageRepresentationType is
"IKImageBrowserNSDataRepresentationType" - if you chose to return a different
representation type, you will need to update this method as well. Finally, the
imageUID must be a unique string. In Core Data, one common approach for getting
a unique identifier for an entity is to use the NSManagedObjectID of the entity,
and retrieve a string description of its URI representation. This could be
achieved in other ways, but this is a simple and relatively common pattern for
this kind of problem.
The AppDelegate class is mostly the boilerplate provided by the Xcode template
for Core Data Application. The additions are provided to enable the slider in
the user interface to control the zoom factor in the browser. This is mostly
achieved through bindings, but the browserZoom property provides the necessary
model and the value is initialized in awakeFromNib.
ImageBrowserViewArrayController is a subclass of NSArrayController that
provided Key-Value Observing functionality necessary to ensure that the browser
view properly updates when the imageRepresentation for any of its content
objects is changed. By itself, the browser will update when the content itself
changes, but does not observe any of properties of the items themselves. This
could be implemented in a number of different ways - the essential thing is that
reloadData is invoked on the browser following any relevant updates.
Interface Builder:
The user interface is contained in the window provided with the MainMenu nib in
the project template. Important additions include the array controller, the
browser view, add/remove buttons, a slider, a form, and an image view. The
interface is a type of master-detail design; the browser, the buttons, and the
slider are the "master", and the form and the image view are the "detail". For
each major element, only alterations from its default state (when dragged from
IB's library) are described.
ImageBrowserViewArrayController
Attributes
Mode: Entity
Entity Name: Person
Prepares Content: Checked
Bindings
Managed Object Context: AppDelegate.managedObjectContext
Identity
Class: ImageBrowserViewArrayController
Connections
browser: IKImageBrowserView
IKImageBrowserView
Bindings
Content: ImageBrowserViewArrayController.arrangedObjects
Selection Indexes:
ImageBrowserViewArrayController.selectionIndexes
Zoom Factor: AppDelegate.zoomFactor
NSButtons
Attributes
Title: (blank)
Image: NSAddTemplate and NSRemoveTemplate
Connections
Action: ImageBrowserViewArrayController.add and remove
NSSlider:
Attributes
State-Continuous: Checked
Bindings
Value: AppDelegate.zoomFactor
NSForm
Attributes
Rows: 4 (labels renamed, resize, etc.)
Bindings of Cells
Value:
ImageBrowserViewArrayController.selection.firstName, etc.
NSImageView
Attributes
Editable: Checked
Bindings
Data:
ImageBrowserViewArrayController.selection.imageRepresentation
Copyright (C) 2008, Apple Inc.</pre>
<!--googleoff: index -->
</td>
</tr>
</table>
<!-- END WIDE COLUMN -->
<!-- END MAIN CONTENT -->
<table width="680" border="0" cellpadding="0" cellspacing="0">
<tr>
<td><div style="width: 100%; height: 1px; background-color: #919699; margin-top: 5px; margin-bottom: 15px"></div></td>
</tr>
<tr>
<td align="center"><br/>
<table border="0" cellpadding="0" cellspacing="0" class="graybox">
<tr>
<th>Did this document help you?</th>
</tr>
<tr>
<td>
<div style="margin-bottom: 8px"><a href="http://developer.apple.com/feedback/?v=1&url=/samplecode/IKImageBrowserViewWithCoreData/listing8.html%3Fid%3DDTS40007876-1.0&media=dvd" target=_new>Yes</a>: Tell us what works for you.</div>
<div style="margin-bottom: 8px"><a href="http://developer.apple.com/feedback/?v=2&url=/samplecode/IKImageBrowserViewWithCoreData/listing8.html%3Fid%3DDTS40007876-1.0&media=dvd" target=_new>It’s good, but:</a> Report typos, inaccuracies, and so forth.</div>
<div><a href="http://developer.apple.com/feedback/?v=3&url=/samplecode/IKImageBrowserViewWithCoreData/listing8.html%3Fid%3DDTS40007876-1.0&media=dvd" target=_new>It wasn’t helpful</a>: Tell us what would have helped.</div>
</td>
</tr>
</table>
</td>
</tr>
</table>
<!-- START BOTTOM APPLE NAVIGATION -->
<!--#include virtual="/includes/footer"-->
<!-- END BOTTOM APPLE NAVIGATION -->
<!-- START CENTER CLOSE -->
</center>
<!-- END CENTER CLOSE -->
</body>
</html>