Skip to content

Instantly share code, notes, and snippets.

@snosrap
Last active December 18, 2017 22:57
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save snosrap/f871b6e321b1c403b73de5a242bcfb1e to your computer and use it in GitHub Desktop.
Save snosrap/f871b6e321b1c403b73de5a242bcfb1e to your computer and use it in GitHub Desktop.
Adds a `fp_TXTRecord` category to NSNetService to allow for more natural access to TXT record data.
#import <Foundation/Foundation.h>
@interface FPNetServiceTXTRecord : NSObject
@property NSNetService *netService;
- (NSString *)objectForKeyedSubscript:(NSString *)key;
@end
@interface NSNetService (FPNetServiceAddtions)
- (FPNetServiceTXTRecord *)fp_TXTRecord;
@end
#import "FPNetServiceTXTRecord.h"
#import <objc/runtime.h>
@implementation FPNetServiceTXTRecord
- (NSString *)objectForKeyedSubscript:(NSString *)key {
NSData *data = [NSNetService dictionaryFromTXTRecordData:self.netService.TXTRecordData][key];
return (data != nil) ? [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] : nil;
}
@end
@implementation NSNetService (FPNetServiceAddtions)
- (FPNetServiceTXTRecord *)fp_TXTRecord {
FPNetServiceTXTRecord *txtRecord = objc_getAssociatedObject(self, @selector(fp_TXTRecord));
if(!txtRecord) {
txtRecord = FPNetServiceTXTRecord.new;
txtRecord.netService = self;
objc_setAssociatedObject(self, @selector(fp_TXTRecord), txtRecord, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
return txtRecord;
}
@end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment