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:
Fred Kiefer 2007-12-14 19:55:51 +00:00
parent babf83a2a1
commit 74757182a4
2 changed files with 48 additions and 6 deletions

View file

@ -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>
* Source/NSKeyValueObserving.m: Rewrite code for the subclass which

View file

@ -506,8 +506,39 @@ replacementForInstance(id o)
}
else
{
[NSException raise: NSInvalidArgumentException
format: @"class not KVC complient for %@", aKey];
NSMapTable depKeys = NSMapGet(dependentKeyTable, [self class]);
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)
{
NSHashTable dependents = NSMapGet(keys, aKey);
NSString *dependentKey;
NSHashEnumerator dependentKeyEnum;
if (!dependents) return;
NSHashEnumerator dependentKeyEnum = NSEnumerateHashTable(dependents);
NSString * dependentKey;
dependentKeyEnum = NSEnumerateHashTable(dependents);
while ((dependentKey = NSNextHashEnumeratorItem(&dependentKeyEnum)))
{
[self willChangeValueForKey:dependentKey];
}
NSEndHashTableEnumeration(&dependentKeyEnum);
}
}
@ -1228,13 +1262,16 @@ replacementForInstance(id o)
if (keys)
{
NSHashTable dependents = NSMapGet(keys, aKey);
NSString *dependentKey;
NSHashEnumerator dependentKeyEnum;
if (!dependents) return;
NSHashEnumerator dependentKeyEnum = NSEnumerateHashTable(dependents);
NSString * dependentKey;
dependentKeyEnum = NSEnumerateHashTable(dependents);
while ((dependentKey = NSNextHashEnumeratorItem(&dependentKeyEnum)))
{
[self didChangeValueForKey:dependentKey];
}
NSEndHashTableEnumeration(&dependentKeyEnum);
}
}