由于某种原因,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"];
由于
答案 0 :(得分:2)
问题是,你永远不会分配和初始化你的设置。
重构您的add:
方法,看起来像这样:
- (void) add:(NSString*) key_ {
if (!self.keys) {
_keys = [[NSMutableSet alloc] init];
}
[self.keys addObject:key_];
if([self.keys count] == 1) {
firstInHandler();
}
}