iOS - 无法将NSString对象添加到NSMutableSet

时间:2014-03-15 12:49:07

标签: ios objective-c ios7

由于某种原因,NSString对象不会进入NSMutableSet

该组保持为空 - 计数保持为0且从不调用firstInHandler

我已经尝试了一切......!

如果有人知道为什么我会非常感谢帮助


VCKeySet.h

#import <Foundation/Foundation.h>

@interface VCKeySet : NSObject
{
    void (^firstInHandler)();
    void (^lastOutHandler)();
}

@property (atomic, readonly, strong) NSMutableSet* keys;

- (id) initWithFirstInHandler:(void(^)()) firstInHandler_ withLastOutHandler:(void(^)()) lastOutHandler_;

- (void) add:(NSString*) key_;
- (void) remove: (NSString*) key_;
- (BOOL) has: (NSString*) key;

@end

VCKeySet.m

#import "VCKeySet.h"

@implementation VCKeySet

@synthesize keys;

- (id) initWithFirstInHandler: (void(^)()) firstInHandler_ withLastOutHandler: (void(^)()) lastOutHandler_
{
    if(self=[self init])
    {
        firstInHandler = firstInHandler_;
        lastOutHandler = lastOutHandler_;
    }

    return self;
}

- (void) add:(NSString*) key_
{
    for(NSString* key in self.keys)
    {
        if([key isEqualToString:key_])
        {
            return;
        }
    }

    [self.keys addObject:key_];

    if([self.keys count] == 1)
    {
        firstInHandler();
    }
}

- (void) remove: (NSString*) key_
{
    for(NSString* key in keys)
    {
        if([key isEqualToString:key_])
        {
            [keys removeObject:key];

            if([keys count] == 0)
            {
                lastOutHandler();
            }
        }
    }
}

- (BOOL) has: (NSString*) key_
{
    for(NSString* key in keys)
    {
        if([key isEqualToString:key_])
        {
            return YES;
        }
    }

    return NO;
}

@end

以下是我尝试向集合

添加密钥的方法
VCKeySet* lock = [[VCKeySet alloc] initWithFirstInHandler:^()
{
    NSLog(@"Adding UI lock");
    [application beginIgnoringInteractionEvents];
}
withLastOutHandler:^()
{
    NSLog(@"Removing UI lock");
    [application endIgnoringInteractionEvents];
}];

[lock add:@"InitialiseApp"];

由于

1 个答案:

答案 0 :(得分:2)

问题是,你永远不会分配和初始化你的设置。

重构您的add:方法,看起来像这样:

- (void) add:(NSString*) key_ {
    if (!self.keys) {
        _keys = [[NSMutableSet alloc] init];
    }

    [self.keys addObject:key_];

    if([self.keys count] == 1) {
        firstInHandler();
    }
}