diff --git a/Source/JSObjectionInjector.h b/Source/JSObjectionInjector.h index a7ee4c2..bc563c9 100644 --- a/Source/JSObjectionInjector.h +++ b/Source/JSObjectionInjector.h @@ -10,5 +10,6 @@ - (id)initWithContext:(NSDictionary *)theGlobalContext; - (id)initWithContext:(NSDictionary *)theGlobalContext andModule:(JSObjectionModule *)theModule; - (id)initWithContext:(NSDictionary *)theGlobalContext andModules:(NSArray *)modules; -- (id)getObject:(id)classOrProtocol, ...; +- (id)getObject:(id)classOrProtocol; +- (id)getObjectWithArgs:(id)classOrProtocol, ... NS_REQUIRES_NIL_TERMINATION; @end diff --git a/Source/JSObjectionInjector.m b/Source/JSObjectionInjector.m index 7d35986..524fe72 100644 --- a/Source/JSObjectionInjector.m +++ b/Source/JSObjectionInjector.m @@ -69,23 +69,23 @@ - (id)initWithContext:(NSDictionary *)theGlobalContext andModules:(NSArray *)mod } -- (id)getObject:(id)classOrProtocol, ... { +- (id)getObjectWithArgs:(id)classOrProtocol, ... { @synchronized(self) { if (!classOrProtocol) { return nil; } - + NSString *key = nil; if (class_isMetaClass(object_getClass(classOrProtocol))) { key = NSStringFromClass(classOrProtocol); } else { key = [NSString stringWithFormat:@"<%@>", NSStringFromProtocol(classOrProtocol)]; } - - + + id injectorEntry = [_context objectForKey:key]; injectorEntry.injector = self; - + if (!injectorEntry) { id entry = [_globalContext objectForKey:key]; if (entry) { @@ -94,7 +94,7 @@ - (id)getObject:(id)classOrProtocol, ... { [_context setObject:injectorEntry forKey:key]; } } - + if (classOrProtocol && injectorEntry) { va_list va_arguments; va_start(va_arguments, classOrProtocol); @@ -102,11 +102,16 @@ - (id)getObject:(id)classOrProtocol, ... { va_end(va_arguments); return [injectorEntry extractObject:arguments]; } - + return nil; } - + return nil; + +} + +- (id)getObject:(id)classOrProtocol { + return [self getObjectWithArgs:classOrProtocol, nil]; } #pragma mark - Private diff --git a/Source/JSObjectionUtils.m b/Source/JSObjectionUtils.m index 36e02ba..013da19 100644 --- a/Source/JSObjectionUtils.m +++ b/Source/JSObjectionUtils.m @@ -64,6 +64,7 @@ static JSObjectionPropertyInfo FindClassOrProtocolForProperty(objc_property_t pr static NSArray* TransformVariadicArgsToArray(va_list va_arguments) { NSMutableArray *arguments = [NSMutableArray array]; + id object; while ((object = va_arg( va_arguments, id ))) { [arguments addObject:object]; diff --git a/Specs/InitializerSpecs.m b/Specs/InitializerSpecs.m index 0661b5f..fcfc105 100644 --- a/Specs/InitializerSpecs.m +++ b/Specs/InitializerSpecs.m @@ -17,7 +17,7 @@ }); it(@"will override the default arguments if arguments are passed to the injector", ^{ - ViewController *controller = [injector getObject:[ViewController class], @"AnotherNib", @"pretendBundle", nil]; + ViewController *controller = [injector getObjectWithArgs:[ViewController class], @"AnotherNib", @"pretendBundle", nil]; [[controller.nibName should] equal:@"MyNib"]; [[controller.bundle should] equal:@"pretendBundle"];