change to hashtable

This commit is contained in:
Pfeil, Scott Robert 2020-06-02 14:44:54 -04:00
parent 9020d6636b
commit b95cb758c8
4 changed files with 10 additions and 15 deletions

View File

@ -26,7 +26,7 @@
@property (nullable, weak, nonatomic) UINavigationController *navigationController; @property (nullable, weak, nonatomic) UINavigationController *navigationController;
/// A list of possible delegates looking for information. /// A list of possible delegates looking for information.
@property (nonnull, strong, nonatomic) NSPointerArray <MVMCorePresentationDelegateProtocol>*delegates; @property (nonnull, strong, nonatomic) NSHashTable <MVMCorePresentationDelegateProtocol>*delegates;
// Will navigate appropriately based on the load style // Will navigate appropriately based on the load style
- (void)navigateWithLoadObject:(nullable MVMCoreLoadObject *)loadObject viewController:(nonnull UIViewController *)viewController delegate:(nullable NSObject<MVMCorePresentationDelegateProtocol>*)delegate completionHandler:(nullable void (^)(void))completionBlock; - (void)navigateWithLoadObject:(nullable MVMCoreLoadObject *)loadObject viewController:(nonnull UIViewController *)viewController delegate:(nullable NSObject<MVMCorePresentationDelegateProtocol>*)delegate completionHandler:(nullable void (^)(void))completionBlock;

View File

@ -48,7 +48,7 @@
self.presentationQueue = [[NSOperationQueue alloc] init]; self.presentationQueue = [[NSOperationQueue alloc] init];
self.presentationQueue.maxConcurrentOperationCount = 1; self.presentationQueue.maxConcurrentOperationCount = 1;
self.delegates = (NSPointerArray <MVMCorePresentationDelegateProtocol>*)[NSPointerArray weakObjectsPointerArray]; self.delegates = (NSHashTable <MVMCorePresentationDelegateProtocol>*)[NSHashTable weakObjectsHashTable];
} }
return self; return self;
} }
@ -56,20 +56,15 @@
#pragma mark - Delegate Handling #pragma mark - Delegate Handling
- (void)addDelegate:(nonnull id <MVMCorePresentationDelegateProtocol>)delegate { - (void)addDelegate:(nonnull id <MVMCorePresentationDelegateProtocol>)delegate {
[self.delegates addPointer:(__bridge void *)(delegate)]; [self.delegates addObject:delegate];
} }
- (void)removeDelegate:(nullable id <MVMCorePresentationDelegateProtocol>)delegate { - (void)removeDelegate:(nullable id <MVMCorePresentationDelegateProtocol>)delegate {
NSUInteger index = NSNotFound; for (id currentDelegate in [self.delegates allObjects]) {
for (NSUInteger i = 0; i < self.delegates.count; i++) { if (currentDelegate == delegate) {
if (delegate == [self.delegates pointerAtIndex:i]) { [self.delegates removeObject:delegate];
index = i;
break;
} }
} }
if (index != NSNotFound) {
[self.delegates removePointerAtIndex:index];
}
} }
#pragma mark - Navigation Helpers #pragma mark - Navigation Helpers

View File

@ -237,7 +237,7 @@
if (self.delegate && [self.delegate respondsToSelector:@selector(navigationController:willDisplayViewController:)]) { if (self.delegate && [self.delegate respondsToSelector:@selector(navigationController:willDisplayViewController:)]) {
[self.delegate navigationController:navigationController willDisplayViewController:viewController]; [self.delegate navigationController:navigationController willDisplayViewController:viewController];
} }
for (NSObject <MVMCorePresentationDelegateProtocol>*delegate in [MVMCoreNavigationHandler sharedNavigationHandler].delegates) { for (NSObject <MVMCorePresentationDelegateProtocol>*delegate in [MVMCoreNavigationHandler sharedNavigationHandler].delegates.allObjects) {
if (delegate && [delegate respondsToSelector:@selector(navigationController:willDisplayViewController:)]) { if (delegate && [delegate respondsToSelector:@selector(navigationController:willDisplayViewController:)]) {
[delegate navigationController:navigationController willDisplayViewController:viewController]; [delegate navigationController:navigationController willDisplayViewController:viewController];
} }
@ -249,7 +249,7 @@
if (self.delegate && [self.delegate respondsToSelector:@selector(navigationController:displayedViewController:)]) { if (self.delegate && [self.delegate respondsToSelector:@selector(navigationController:displayedViewController:)]) {
[self.delegate navigationController:navigationController displayedViewController:viewController]; [self.delegate navigationController:navigationController displayedViewController:viewController];
} }
for (NSObject <MVMCorePresentationDelegateProtocol>*delegate in [MVMCoreNavigationHandler sharedNavigationHandler].delegates) { for (NSObject <MVMCorePresentationDelegateProtocol>*delegate in [MVMCoreNavigationHandler sharedNavigationHandler].delegates.allObjects) {
if (delegate && [delegate respondsToSelector:@selector(navigationController:displayedViewController:)]) { if (delegate && [delegate respondsToSelector:@selector(navigationController:displayedViewController:)]) {
[delegate navigationController:navigationController displayedViewController:viewController]; [delegate navigationController:navigationController displayedViewController:viewController];
} }

View File

@ -40,7 +40,7 @@
if (self.delegate && [self.delegate respondsToSelector:@selector(viewController:willPresentViewController:)]) { if (self.delegate && [self.delegate respondsToSelector:@selector(viewController:willPresentViewController:)]) {
[self.delegate viewController:self.presentingViewController willPresentViewController:self.presentedViewController]; [self.delegate viewController:self.presentingViewController willPresentViewController:self.presentedViewController];
} }
for (NSObject <MVMCorePresentationDelegateProtocol>*delegate in [MVMCoreNavigationHandler sharedNavigationHandler].delegates) { for (NSObject <MVMCorePresentationDelegateProtocol>*delegate in [MVMCoreNavigationHandler sharedNavigationHandler].delegates.allObjects) {
if (delegate && [delegate respondsToSelector:@selector(viewController:willPresentViewController:)]) { if (delegate && [delegate respondsToSelector:@selector(viewController:willPresentViewController:)]) {
[delegate viewController:self.presentingViewController willPresentViewController:self.presentedViewController]; [delegate viewController:self.presentingViewController willPresentViewController:self.presentedViewController];
} }
@ -51,7 +51,7 @@
if (self.delegate && [self.delegate respondsToSelector:@selector(viewController:didPresentViewController:)]) { if (self.delegate && [self.delegate respondsToSelector:@selector(viewController:didPresentViewController:)]) {
[self.delegate viewController:self.presentingViewController didPresentViewController:self.presentedViewController]; [self.delegate viewController:self.presentingViewController didPresentViewController:self.presentedViewController];
} }
for (NSObject <MVMCorePresentationDelegateProtocol>*delegate in [MVMCoreNavigationHandler sharedNavigationHandler].delegates) { for (NSObject <MVMCorePresentationDelegateProtocol>*delegate in [MVMCoreNavigationHandler sharedNavigationHandler].delegates.allObjects) {
if (delegate && [delegate respondsToSelector:@selector(viewController:didPresentViewController:)]) { if (delegate && [delegate respondsToSelector:@selector(viewController:didPresentViewController:)]) {
[delegate viewController:self.presentingViewController didPresentViewController:self.presentedViewController]; [delegate viewController:self.presentingViewController didPresentViewController:self.presentedViewController];
} }