-
Notifications
You must be signed in to change notification settings - Fork 3
/
index.html
executable file
·178 lines (148 loc) · 9.14 KB
/
index.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
<!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>With and Without Bindings</title>
<!-- END TITLE -->
<script language="JavaScript">
function JumpToNewPage() {
window.location=document.scpopupmenu.gotop.value;
return true;
}
</script>
</head>
<!-- BEGIN BODY OPEN -->
<body><a name="//apple_ref/doc/uid/DTS10004303" title="With and Without Bindings"></a>
<!--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">Reference Library</a> > <a href="../../samplecode/index.html">Sample Code</a> > <a href="../../samplecode/Cocoa/index.html">Cocoa</a> > <a href="../../samplecode/Cocoa/idxDataManagement-date.html">Data Management</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">With and Without Bindings</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">
<p><strong>Version:</strong> 2.0</p>
<p><strong>Posted:</strong> 2008-01-04</p>
<p><strong>Build Requirements:</strong> Xcode 3.0, Mac OS X v10.5</p>
<p><strong>Runtime Requirements:</strong> Mac OS X v10.5</p>
<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">/01_WithoutBindings/Bookmark.h</option>
<option value="listing2.html">/01_WithoutBindings/Bookmark.m</option>
<option value="listing3.html">/01_WithoutBindings/main.m</option>
<option value="listing4.html">/01_WithoutBindings/MyDocument.h</option>
<option value="listing5.html">/01_WithoutBindings/MyDocument.m</option>
<option value="listing6.html">/01_WithoutBindings/TableViewDataSource.h</option>
<option value="listing7.html">/01_WithoutBindings/TableViewDataSource.m</option>
<option value="listing8.html">/02_WithBindings/Bookmark.h</option>
<option value="listing9.html">/02_WithBindings/Bookmark.m</option>
<option value="listing10.html">/02_WithBindings/main.m</option>
<option value="listing11.html">/02_WithBindings/MyDocument.h</option>
<option value="listing12.html">/02_WithBindings/MyDocument.m</option>
<option value="listing13.html">/02_WithBindings/StringToURLTransformer.h</option>
<option value="listing14.html">/02_WithBindings/StringToURLTransformer.m</option>
<option value="listing15.html">/02_WithBindings/TableViewDataSource.h</option>
<option value="listing16.html">/02_WithBindings/TableViewDataSource.m</option>
<option value="listing17.html">/ReadMe.txt</option></select>
</p>
</form>
<p><strong><a href="WithAndWithoutBindings.zip">Download Sample</a></strong> (“WithAndWithoutBindings.zip”, 158.0K)<BR>
<strong><a href="WithAndWithoutBindings.dmg">Download Sample</a></strong> (“WithAndWithoutBindings.dmg”, 202.2K)</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">
<h2>Description</h2>
<p>This sample illustrates the adoption of Cocoa Bindings to manage synchronization of values between models and views, and in particular the role of the NSController object:</p><p>(a) How you can consider NSController object as a refactoring of your own code; and </p><p>(b) How you can subclass an NSController class to customise its behaviour.</p><p>This is best seen if you compare the two projects using the File Merge application.</p><p>First, compare the MyDocument classes. Notice that most of the instance variables "disappear", as does all of the code related simply to updating the user interface in response to selection changes. Detail UI elements are bound to the selection of the array controller, so this is all handled by bindings.</p><p>Second, compare the TableViewDataSource files which contain the implementation of the drag and drop methods for the table view (and in the case of the first implementation, also the standard data source methods).</p><p>There is a subtle but profound difference between the TableViewDataSource files in the two projects. In the first case, the files contain a category of the MyDocument class. In the second, the files contain a subclass of NSArrayController. That the standard data source methods disappear should not be a surprise. What may be more unexpected, however, is how little code changes in the drag and drop methods.</p><p>Here responsibility for drag and drop has been passed to the object with most similar other responsibilities. So in terms of refactoring, you can consider the NSArrayController instance to have absorbed the functionality you would normally have to have implemented yourself (in the table view data source methods) whilst still allowing the extensibility of subclassing to provide additional custom behaviour.</p><p>Finally, notice that the WithBindings project includes a simple value transformer. It takes over responsibility from the MyDocument object in the WithoutBindings version of converting between an URL in the bookmark object and a string in the URL text field in the window. (The 'value' binding for the URL text field has "StringToURLTransformer" as its value transformer option.)</p>
<h2>Document Revision History</h2>
<table cellspacing="0" class="graybox" width="680">
<tr>
<th width="100">Date</th>
<th width="580">Notes</th>
</tr>
<tr><td scope="row">2008-01-04</td><td>Updated to use Objective-C 2.0.</td></tr>
<tr><td scope="row">2007-08-23</td><td>Fixed WithBindings MyDocument nib file (previous version could not be opened on Mac OS X v10.4).
Updated table view data source to use API appropriate for Mac OS X v10.4:
* The table view data source now uses tableView:writeRowsWithIndexes:toPasteboard: instead of tableView:writeRows:toPasteboard:
* The table view drag mask is set using setDraggingSourceOperationMask:forLocal: instead of using a subclass of NSTableView
</td></tr>
<tr><td scope="row">2007-06-05</td><td>N/A</td></tr>
<tr><td scope="row">2007-05-31</td><td>Illustrates the adoption of Cocoa Bindings and refactoring using a subclass of NSArrayController.</td></tr>
</table>
</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/WithAndWithoutBindings/index.html%3Fid%3DDTS10004303-2.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/WithAndWithoutBindings/index.html%3Fid%3DDTS10004303-2.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/WithAndWithoutBindings/index.html%3Fid%3DDTS10004303-2.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>