Written by
        Der Teilweise
      
on
  on
UIAlertView+DHUserData
UserData for UIAlertView
Wouldn’t it be nice if one could add a custom object to every UIAlertView instance? With this tiny category, you can! Simply clone my repository at github.
Usage
Import the UIAlertView+DHUserData-Headerfile:
#import "UIAlertView+DHUserData.h"
In your code, simply use the dhUserData property to assign your custom data:
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Customized"
                                                    message:@"This alert has custom data"
                                                   delegate:self
                                          cancelButtonTitle:@"Cancel"
                                          otherButtonTitles:@"Wow", @"Shocking" nil];
alertView.dhUserData = @{
   @"believable" : @NO,
   @"funfactor" : @"high"
};
In UIAlertView’s callback, your data is still there:
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
   NSLog(@"Believable: %@", [alertView.dhUserData objectForKey:@"believabe"]);
}
Implementation
UIAlertView+DHUserData uses associated data provided by the Objective-C runtime to store the user data. The getter/setter simply forward the calls to the matching Objective-C runtime calls:
- (void)setDhUserData:(id)dhUserData
{
    objc_setAssociatedObject(self,
                             DHUIAlertViewDHUserDataObjectKey,
                             dhUserData,
                             OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
- (id)dhUserData
{
    return objc_getAssociatedObject(self,
                                    DHUIAlertViewDHUserDataObjectKey);
}