2014-01-28 6 views
0

Мне было интересно, как получить доступ к «статическим» vars от модели из разных ViewControllers. Должен ли я идти на:Статические var, method или singleton?

  • статических переменные (если да, то как?)
  • статического метода
  • одноэлементных + метод
  • одноэлементных + переменные (пользовательские добытчиков)

#import "CategoryModel.h" 

@implementation CategoryModel 

-(NSArray*) allSelected { 
    return [[NSArray alloc] initWithArray:[[NSUserDefaults standardUserDefaults] objectForKey:SELECTEDCATEGORIES_DEFAULTSKEY]]; 
} 

-(NSString*) allSelectedAsUrlParams { 
    NSMutableString *categoryList = [NSMutableString string]; 

    for (NSArray *category in self.allSelected) { 
     [categoryList appendString:[category valueForKey:@"value"]]; 
     if(![[self.allSelected lastObject] isEqual:category]) { 
      [categoryList appendString:@","]; 
     } 
    } 

    return categoryList; 

} 

@end 

* Edit (рабочая) *

// header 
#import <Foundation/Foundation.h> 

@interface CategoryModel : NSObject 

+ (NSString*)allSelectedAsUrlParams; 

@end 


// implementation 
#import "CategoryModel.h" 

@implementation CategoryModel 


+ (NSString*)allSelectedAsUrlParams { 
    return @"somethingGreat"; 
} 

@end 

// How to use 
CategoryModel.allSelectedAsUrlParams 
+0

Я опубликовал рабочий код – fabian

ответ

1

Это действительно будет вопросом архитектурного предпочтения, но если более чем один класс будет нуждаться в статическом ВАРЕ, это один подход:

Constants.h 

extern BOOL const TEST_MODE; 
extern NSString * const SOME_STRING; 

Constants.m 

BOOL const TEST_MODE = YES; 
NSString * const SOME_STRING = @"SomeString"; 

в качестве альтернативы, вы можете просто добавить extern NSString * const SOME_STRING; в заголовок класса, что является специфичным для (и соответствующего NSString * const SOME_STRING = @"SomeString"; в ом), а затем вызвать этот вар непосредственно импортировать заголовок класса с вам необходимо использовать константу SOME_STRING, чтобы добраться до него.

+0

'ClassName.SOME_STRING' может работать на других языках, но не в Objective-C. Пока вы импортируете заголовок, это просто 'SOME_STRING'. – jlehr

+0

Действительно ... Мой разум подпрыгивает назад и вперед между некоторыми проектами Obj-C и C#. Я отредактировал ответ, чтобы отразить ваш комментарий :) –

+0

Oof, это должно быть сложно. :-) – jlehr

Смежные вопросы