2014-09-18 4 views
0

다른 뷰 컨트롤러에서 재사용해야하는 내 앱에서 싱글 톤을 만드는 것으로 시작합니다.싱글 톤을 연락처에서 제외시키기 Selector

나는 사용자의 연락처에 액세스하여 SMS를 통해 메시지를 보낼 수있는 방법을 사용합니다. 이것은 완벽하게 작동합니다. 이제 코드를 다른 viewController에서 액세스 할 수있는 싱글 톤으로 변환하려고합니다.

이것은 지금까지 제 코드입니다. 나는 어떻게 시작해야할지 모르겠다. 모든 권장 사항을 많이 주시면 감사하겠습니다.

SendSMS.h

#import <UIKit/UIKit.h> 
#import "SMContactsSelector.h" 
#import <MessageUI/MessageUI.h> 

@interface SendSMS : UIViewController 

- (IBAction)button:(id)sender; 

@end 

SendSMS.m는

#import "SendSMS.h" 

@interface SendSMS() 

@end 

@implementation SendSMS 

NSMutableArray *phoneArray; 

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    if (self) { 
     // Custom initialization 
    } 
    return self; 
} 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view. 
} 

- (void)viewDidAppear:(BOOL)animated { 

    NSString *phoneString = [[NSUserDefaults standardUserDefaults] 
    stringForKey:@"phoneString"]; 

    if (!([phoneString isEqualToString:@""])) { 

     [[NSUserDefaults standardUserDefaults] setObject:@"" forKey:@"phoneString"]; 
     [[NSUserDefaults standardUserDefaults] synchronize]; 

     //check if the device can send text messages 
     if(![MFMessageComposeViewController canSendText]) { 
      UIAlertView * alert = [[UIAlertView alloc] initWithTitle:@"Error" 
      message:@"Your device cannot send text messages" delegate:nil 
      cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
      [alert show]; 
      return; 
     } 

     //set receipients 
     NSArray *recipients = [phoneString componentsSeparatedByString:@","]; 

     //set message text 
     NSString *message = @"message"; 
     MFMessageComposeViewController *messageController = 
     [[MFMessageComposeViewController alloc] init]; 
     messageController.messageComposeDelegate = self; 
     [messageController setRecipients:recipients]; 
     [messageController setBody:message]; 

     [self presentViewController:messageController animated:YES completion:nil]; 
    } 
} 

- (IBAction)button:(id)sender { 

    SMContactsSelector *controller = [[SMContactsSelector alloc] 
    initWithNibName:@"SMContactsSelector" bundle:nil]; 
    controller.delegate = self; 
    controller.requestData = DATA_CONTACT_TELEPHONE; // DATA_CONTACT_ID 
    DATA_CONTACT_EMAIL , DATA_CONTACT_TELEPHONE 
    controller.showModal = YES; //Mandatory: YES or NO 
    controller.showCheckButton = YES; //Mandatory: YES or NO 

    [self presentModalViewController:controller animated:YES]; 
} 

- (void)numberOfRowsSelected:(NSInteger)numberRows withData:(NSArray *)data 
andDataType:(DATA_CONTACT)type { 

    if (type == DATA_CONTACT_TELEPHONE) { 

     for (int i = 0; i < [data count]; i++) { 

      NSString *str = [data objectAtIndex:i];     
      str = [str reformatTelephone]; 
      [phoneArray addObject:str]; 

      NSString *phoneStringAppended1 = [[NSUserDefaults standardUserDefaults] 
      stringForKey:@"phoneString"]; 
      NSString *phoneStringAppended2 = [phoneStringAppended1 
      stringByAppendingString: str]; 
      NSString *phoneString = [phoneStringAppended2 stringByAppendingString:@", 
      "]; 
      [[NSUserDefaults standardUserDefaults] setObject:phoneString 
      forKey:@"phoneString"]; 
      [[NSUserDefaults standardUserDefaults] synchronize]; 
     } 
    } 
} 

#pragma mark - MFMailComposeViewControllerDelegate methods 
- (void)messageComposeViewController:(MFMessageComposeViewController *)controller 
didFinishWithResult:(MessageComposeResult) result { 
    switch (result) { 
     case MessageComposeResultCancelled: break; 
     case MessageComposeResultFailed: break; 
     case MessageComposeResultSent: break; 
     default: break; 
    } 
    [self dismissViewControllerAnimated:YES completion:nil]; 
} 

@end 

답변

1

그것은의 ViewController 싱글을 만들기 위해 확인하지 않습니다.

새로운 클래스에서 필요한 코드를 가져와야하며이 코드는 싱글 톤이어야하며 모든 viewcontroller에서 액세스해야합니다.

난 당신이

필요

#import <foundation/Foundation.h> 

@interface SmsManager : NSObject { 
    NSString *someProperty; 
} 

@property (nonatomic, retain) NSString *someProperty; 

+ (id)sharedManager; 

@end 

SmsManager.m

#import "SmsManager.h" 

@implementation SmsManager 

@synthesize someProperty; 

#pragma mark Singleton Methods 

+ (id)sharedManager { 
    static MyManager *sharedMyManager = nil; 
    static dispatch_once_t onceToken; 
    dispatch_once(&onceToken, ^{ 
     sharedMyManager = [[self alloc] init]; 
    }); 
    return sharedMyManager; 
} 

- (id)init { 
    if (self = [super init]) { 
     // initialization 
    } 
    return self; 
} 
@end 

그냥 전화를 당신에게 SmsManager *smsManager = [SmsManager sharedInstance]; anywere를 싱글

SmsManager.h의 패턴을주지

관련 문제