mirror of
https://github.com/gnustep/libs-base.git
synced 2025-05-31 16:50:58 +00:00
Made overrideSetterFor: aware of dependent key mapping.
git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@25739 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
parent
95daef46c6
commit
dc96bd2cd7
2 changed files with 48 additions and 6 deletions
|
@ -1,3 +1,8 @@
|
||||||
|
2007-12-14 Richard Frith-Macdonald <rfm@gnu.org>
|
||||||
|
|
||||||
|
* Source/NSKeyValueObserving.m (-overrideSetterFor:): Made aware
|
||||||
|
of dependent key mapping.
|
||||||
|
|
||||||
2007-12-14 Richard Frith-Macdonald <rfm@gnu.org>
|
2007-12-14 Richard Frith-Macdonald <rfm@gnu.org>
|
||||||
|
|
||||||
* Source/NSKeyValueObserving.m: Rewrite code for the subclass which
|
* Source/NSKeyValueObserving.m: Rewrite code for the subclass which
|
||||||
|
|
|
@ -506,8 +506,39 @@ replacementForInstance(id o)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
[NSException raise: NSInvalidArgumentException
|
NSMapTable depKeys = NSMapGet(dependentKeyTable, [self class]);
|
||||||
format: @"class not KVC complient for %@", aKey];
|
|
||||||
|
if (depKeys)
|
||||||
|
{
|
||||||
|
NSMapEnumerator enumerator = NSEnumerateMapTable(depKeys);
|
||||||
|
NSString *mainKey;
|
||||||
|
NSHashTable dependents;
|
||||||
|
|
||||||
|
while (NSNextMapEnumeratorPair(&enumerator, (void **)(&mainKey), &dependents))
|
||||||
|
{
|
||||||
|
NSHashEnumerator dependentKeyEnum;
|
||||||
|
NSString *dependentKey;
|
||||||
|
|
||||||
|
if (!dependents) continue;
|
||||||
|
dependentKeyEnum = NSEnumerateHashTable(dependents);
|
||||||
|
while ((dependentKey = NSNextHashEnumeratorItem(&dependentKeyEnum)))
|
||||||
|
{
|
||||||
|
if ([dependentKey isEqual: aKey])
|
||||||
|
{
|
||||||
|
[self overrideSetterFor: mainKey];
|
||||||
|
found = YES;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
NSEndHashTableEnumeration(&dependentKeyEnum);
|
||||||
|
}
|
||||||
|
NSEndMapTableEnumeration(&enumerator);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!found)
|
||||||
|
{
|
||||||
|
[NSException raise: NSInvalidArgumentException
|
||||||
|
format: @"class not KVC complient for %@", aKey];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1212,13 +1243,16 @@ replacementForInstance(id o)
|
||||||
if (keys)
|
if (keys)
|
||||||
{
|
{
|
||||||
NSHashTable dependents = NSMapGet(keys, aKey);
|
NSHashTable dependents = NSMapGet(keys, aKey);
|
||||||
|
NSString *dependentKey;
|
||||||
|
NSHashEnumerator dependentKeyEnum;
|
||||||
|
|
||||||
if (!dependents) return;
|
if (!dependents) return;
|
||||||
NSHashEnumerator dependentKeyEnum = NSEnumerateHashTable(dependents);
|
dependentKeyEnum = NSEnumerateHashTable(dependents);
|
||||||
NSString * dependentKey;
|
|
||||||
while ((dependentKey = NSNextHashEnumeratorItem(&dependentKeyEnum)))
|
while ((dependentKey = NSNextHashEnumeratorItem(&dependentKeyEnum)))
|
||||||
{
|
{
|
||||||
[self willChangeValueForKey:dependentKey];
|
[self willChangeValueForKey:dependentKey];
|
||||||
}
|
}
|
||||||
|
NSEndHashTableEnumeration(&dependentKeyEnum);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1228,13 +1262,16 @@ replacementForInstance(id o)
|
||||||
if (keys)
|
if (keys)
|
||||||
{
|
{
|
||||||
NSHashTable dependents = NSMapGet(keys, aKey);
|
NSHashTable dependents = NSMapGet(keys, aKey);
|
||||||
|
NSString *dependentKey;
|
||||||
|
NSHashEnumerator dependentKeyEnum;
|
||||||
|
|
||||||
if (!dependents) return;
|
if (!dependents) return;
|
||||||
NSHashEnumerator dependentKeyEnum = NSEnumerateHashTable(dependents);
|
dependentKeyEnum = NSEnumerateHashTable(dependents);
|
||||||
NSString * dependentKey;
|
|
||||||
while ((dependentKey = NSNextHashEnumeratorItem(&dependentKeyEnum)))
|
while ((dependentKey = NSNextHashEnumeratorItem(&dependentKeyEnum)))
|
||||||
{
|
{
|
||||||
[self didChangeValueForKey:dependentKey];
|
[self didChangeValueForKey:dependentKey];
|
||||||
}
|
}
|
||||||
|
NSEndHashTableEnumeration(&dependentKeyEnum);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue