iOS Development UI KVC (value/assignment)-KVO (observe A change in an Object's properties)
Last Update:2015-09-27
Source: Internet
Author: User
<span id="Label3"></p><p><p>I. Kvc:key value coding, typically used to assign a value to an Object's properties</p></p><p><p>1. KVC Assignment</p></p><pre><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">1.1 founder</span></span>Ldperson *p =<span style="color: #000000;"><span style="color: #000000;">[[ldperson alloc] Init];self.person</span></span>=<span style="color: #000000;"><span style="color: #000000;">p;</span></span><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">1.2 Creating a dog</span></span>Lddog *dog =<span style="color: #000000;"><span style="color: #000000;">[[lddog alloc] init];</span></span><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">1.3 Assigning a dog to a person</span></span>[p Setvalue:dog Forkeypath:<span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;">Dog</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span><span style="color: #000000;"><span style="color: #000000;">];</span></span><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">1.4 Assign a value to Dog's weight property by KVC \</span></span><span style="color: #000000;">the <span style="color: #000000;">Weight property of the Owner's dog is automatically found when the value is assigned [p setvalue:@</span></span><span style="color: #800080;"><span style="color: #800080;">20.0</span></span>Forkeypath:<span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;">Dog.weight</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span><span style="color: #000000;"><span style="color: #000000;">]; NSLog (</span></span><span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;">Books =%@</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span>, [p Valueforkeypath:<span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;">Dog.weight</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span><span style="color: #000000;"><span style="color: #000000;">]); [dog print];</span></span></pre><p><p>2. KVC Dictionary Assignment</p></p><pre><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">2.1 Create a dictionary, the property of the person is the key, corresponding to the assigned value</span></span>Nsdictionary *dict = @{<span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;">name</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span>:<span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;">Jack</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span>,<span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;"></span> age</span><span style="color: #800000;"><span style="color: #800000;">"</span></span>:<span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;">Ten</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span>,<span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;">Height</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span>:<span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;">1.65</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span><span style="color: #000000;"><span style="color: #000000;">};</span></span><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">2.2 Assigning a Person object property by keys in the dictionary</span></span><span style="color: #000000;"><span style="color: #000000;">[p setvaluesforkeyswithdictionary:dict]; NSLog (</span></span><span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;">name =%@, age =%@, Height =%@</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span>, [p Valueforkeypath:<span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;">name</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span>], [p Valueforkeypath:<span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;"></span> age</span><span style="color: #800000;"><span style="color: #800000;">"</span></span>], [p Valueforkeypath:<span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;">Height</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span>]);</pre><p><p>3. Custom Dictionaries</p></p><pre><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">3.1 Defining Dictionaries</span></span>Nsdictionary *dict1 = @{<span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;">name</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span>:<span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;">Jim</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span><span style="color: #000000;"><span style="color: #000000;">, </span></span><span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;"></span> age</span><span style="color: #800000;"><span style="color: #800000;">"</span></span>:<span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;"></span> -</span><span style="color: #800000;"><span style="color: #800000;">"</span></span><span style="color: #000000;"><span style="color: #000000;">, </span></span><span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;">Height</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span>:<span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;">1.75</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span><span style="color: #000000;"><span style="color: #000000;">, </span></span><span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;">Books</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span>: @[@{<span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;"></span> price</span><span style="color: #800000;"><span style="color: #800000;">"</span></span>:<span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;"></span> -</span><span style="color: #800000;"><span style="color: #800000;">"</span></span>}, @{<span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;"></span> price</span><span style="color: #800000;"><span style="color: #800000;">"</span></span>:<span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;">98</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span>}, @{<span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;"></span> price</span><span style="color: #800000;"><span style="color: #800000;">"</span></span>:<span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;"></span> $</span><span style="color: #800000;"><span style="color: #800000;">"</span></span>}, @{<span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;"></span> price</span><span style="color: #800000;"><span style="color: #800000;">"</span></span>:<span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;">198</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span>}],<span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;">Dog</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span>: @{<span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;">Weight</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span>:<span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;">45.89</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span><span style="color: #000000;"><span style="color: #000000;">}};</span></span><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">3.2 KVC Value Assignment</span></span><span style="color: #000000;"><span style="color: #000000;">[p setvaluesforkeyswithdictionary:dict1];</span></span><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">3.3 The dictionary is stored in the output boos</span></span>NSLog (<span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;">Books =%@</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span>, [p Valueforkeypath:<span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;">Books</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span><span style="color: #000000;"><span style="color: #000000;">]); NSLog (</span></span><span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;">dog.weight =%@</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span>, [p Valueforkeypath:<span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;">Dog.weight</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span><span style="color: #000000;"><span style="color: #000000;">]);</span></span><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">3.4 traversal, Let Books store dictionary</span></span>Nsmutablearray *arraym =<span style="color: #000000;"><span style="color: #000000;">[nsmutablearray array];</span></span><span style="color: #0000ff;"><span style="color: #0000ff;"></span> for</span>(nsdictionary *dict<span style="color: #0000ff;"><span style="color: #0000ff;">inch</span></span>[p Valueforkeypath:<span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;">Books</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span><span style="color: #000000;"><span style="color: #000000;">]) {ldbook</span></span>*book =<span style="color: #000000;"><span style="color: #000000;">[ldbook bookwithdict:dict]; [arraym addobject:book];} [p Setvalue:arraym forkeypath:</span></span><span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;">Books</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span><span style="color: #000000;"><span style="color: #000000;">]; NSLog (</span></span><span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;">Books =%@</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span>, [p Valueforkeypath:<span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;">Books</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span>]);</pre><p><p>4. KVC Value</p></p><pre>Nsmutablearray *TEMPM =<span style="color: #000000;"><span style="color: #000000;">[nsmutablearray array];</span></span><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">4.1 KVC Take out the value of the price in the array books</span></span><span style="color: #0000ff;"><span style="color: #0000ff;"></span> for</span>(ldbook *book<span style="color: #0000ff;"><span style="color: #0000ff;">inch</span></span>[p Valueforkeypath:<span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;">Books</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span><span style="color: #000000;"><span style="color: #000000;">]) {[tempm addobject:[book valueforkeypath:</span></span><span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;"></span> price</span><span style="color: #800000;"><span style="color: #800000;">"</span></span><span style="color: #000000;"><span style="color: #000000;">]];} NSLog (</span></span><span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;">%@</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span><span style="color: #000000;"><span style="color: #000000;">, tempm);</span></span><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">4.2 KVC Take out the maximum/minimum/average/number of price in the array</span></span>NSLog (<span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;">Max =%@</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span>, [[p Valueforkeypath:<span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;">Books</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span>] Valueforkeypath:<span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;">@max.</span> price</span><span style="color: #800000;"><span style="color: #800000;">"</span></span><span style="color: #000000;"><span style="color: #000000;">]); NSLog (</span></span><span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;">Min =%@</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span>, [[p Valueforkeypath:<span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;">Books</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span>] Valueforkeypath:<span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;">@min.</span> price</span><span style="color: #800000;"><span style="color: #800000;">"</span></span><span style="color: #000000;"><span style="color: #000000;">]); NSLog (</span></span><span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;">AVG =%@</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span>, [[p Valueforkeypath:<span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;">Books</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span>] Valueforkeypath:<span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;">@avg.</span> price</span><span style="color: #800000;"><span style="color: #800000;">"</span></span><span style="color: #000000;"><span style="color: #000000;">]); NSLog (</span></span><span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;">Count =%@</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span>, [[p Valueforkeypath:<span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;">Books</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span>] Valueforkeypath:<span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;">@count.</span> price</span><span style="color: #800000;"><span style="color: #800000;">"</span></span>]);</pre><p><p>Two. Kvo:key Value OBserver (viewer)</p></p><p><p>By KVO you can observe that the property value of an object changes</p></p><p><p>1. Create an observer for person to observe the Name property</p></p><pre><pre>[p addobserver:self forkeypath:<span style="color: #800000;">@ "</span><span style="color: #800000;">name</span><span style="color: #800000;">"</span> options:nskeyvalueobservingoptionnew | Nskeyvalueobservingoptionold context:nil];</pre></pre><p><p>2. Change the value of the Person's name</p></p><pre><pre>[p setValue:<span style="color: #800000;">@ "</span><span style="color: #800000;">ldd</span><span style="color: #800000;">"</span> forkey:<span style="color: #800000;">@ "</span><span style="color: #800000;">name</span><span style="color: #800000;">"</span>];</pre></pre>3. When the value of Person's name changes, a callback is<p><p>-(void) observevalueforkeypath: (nsstring *) keypath ofobject: (id) object change: (nsdictionary *) change context: (void *) Context</p></p><pre><span style="color: #0000ff;"><span style="color: #0000ff;">#pragma</span></span>Mark-implement Kvo callback method<span style="color: #008000;"><span style="color: #008000;">/*</span></span><span style="color: #008000;">* * <span style="color: #008000;">This method is called when the Object's property is changed * * @param keypath Listening Properties * @param Object Listener * @param change new value and old value * @param context extra number According</span></span><span style="color: #008000;"><span style="color: #008000;">*/</span></span>- (<span style="color: #0000ff;"><span style="color: #0000ff;">void</span></span>) observevalueforkeypath: (nsstring *) keypath ofobject: (<span style="color: #0000ff;"><span style="color: #0000ff;">ID</span></span>)<span style="color: #0000ff;"><span style="color: #0000ff;">Object</span></span>Change: (nsdictionary *) Change Context: (<span style="color: #0000ff;"><span style="color: #0000ff;">void</span></span>*<span style="color: #000000;"><span style="color: #000000;">) Context{NSLog (</span></span><span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;">KeyPath =%@</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span><span style="color: #000000;"><span style="color: #000000;">, keypath); NSLog (</span></span><span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;">Object =%@</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span>,<span style="color: #0000ff;"><span style="color: #0000ff;">Object</span></span><span style="color: #000000;"><span style="color: #000000;">); NSLog (</span></span><span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;">change <span style="color: #800000;">=%@</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span><span style="color: #000000;"><span style="color: #000000;">, change);}</span></span></pre><p><p>4. Destroy the Observer after the callback is completed</p></p><pre><pre><span style="color: #008000;">/*</span> <span style="color: #008000;">* * </span> <span style="color: #008000;">*</span>/-<span style="color: #0000ff;">(void</span><span style="color: #000000;">) dealloc{ [self.person removeobserver:self forkeypath:</span><span style="color: #800000;">@ "</span> <span style="color: #800000;"> Name</span><span style="color: #800000;">"context:nil"</span> <span style="color: #000000;"> ;}</span></pre></pre><p><p></p></p><p><p>iOS Development UI KVC (value/assignment)-KVO (observe A change in an Object's properties)</p></p></span>