Say you want some type safety around how you define NSErrors. Here is one way to do it.

MyClass.h

extern NSString * const MyClassErrorDomain;
typedef NS_ENUM(NSUInteger, MyClassError) {
    MyClassInvalidThing1 = 1,
    MyClassInvalidThing2 = 2,
};

MyClass.m

NSString * const MyClassErrorDomain = @"MyClassErrorDomain";
...

- (void)tryWakeUpAndReconnect;
{
    if (self.shouldTryWakeup) {
        [self.delegate failedWithError:[self errorThing1];
    }
}

#pragma mark Errors

// if a Spotify app could not be found or woken up
- (NSError *)errorThing1
{
    return [NSError errorWithDomain:MyClassErrorDomain
                               code:MyClassInvalidThing1
                           userInfo:nil];
}