2014-03-03 50 views
0

如何訪問在類viewController中定義的實例變量。從另一個類訪問變量objc

ViewController.h

@interface ViewController : UIViewController 
{ 
    Class1* class1; 
} 

ViewController.m

@implementation ViewController 
class1 = [[Class1 alloc]init]; 
@end 

Class1.h

@interface Class1 : NSObject 
{ 
NSMutableArray* variablesArray; 
} 
@property NSMutableArray* variablesArray; 

Class1.m

@implementation Class1 
@synthesize variablesArray; 
@end 

現在我想從Class2.m中訪問實例「class1」變量「variablesArray」。我想從MutableArray「variablesArray」添加和獲取對象。可能嗎?

+0

'@implementation ViewController中的Class1 = [[Class1的頁頭] INIT]; @ end'是一個語法錯誤,你不能在實現中擁有裸露的代碼。 –

+0

您可以在任何其他類中訪問class1的屬性。只需在相應的類中創建要訪問的類的對象,並將該屬性作爲class1object.VariablesArray –

回答

1

是的,這是可能的。

使其他類的對象和訪問變量。

在claas2進口的Class1(#進口 「1類」)

Class1 *objClass1= [[Class1 alloc] init]; 

現在訪問諸如

[objClass1.variableArray addObject:@"object"]; 

[objClass1.variableArray objectAtIndex:0]; 

如果你想加入這個類來訪問陣列的同一實例做一個Singleton類 方法

+ (Class1 *)sharedInstance 
{ 
    static Class1 *shared = nil; 

    static dispatch_once_t onceToken; 
    dispatch_once(&onceToken, 
        ^{ 
         shared = [[self alloc] init]; 
        }); 

    return shared; 
} 

和類2中的訪問像

[[Class1 sharedInstance] variableAray]; 
+0

調用時:Class1 * objClass1 = [[Class1 alloc] init];編譯器創建Class1的新實例(objClass1),這是真的嗎?但我想訪問在ViewController中創建的實例的變量。我不想在Class2.m – user2374693

+0

@ user2374693中分配新實例,這是不正確的。爲什麼你不想在class2中創建class1的對象?如果你想訪問一個類的屬性,你需要創建該類的實例 –

+0

@ user2374693我們可以在這裏繼續這個聊天http://chat.stackoverflow.com/rooms/48865/accessing-class-property –

0

您可以通過使用點運算符來簡單訪問類實例的公共屬性。請注意,通過設置像(readwrite,readonly)這樣的屬性屬性,有幾種方法來封裝實例變量。

Class1 aClass = [[Class1 alloc] init]; 
aClass.varibalesArray addObject:@[ @"someObject" ]; 

確保在Class 1的init方法正確初始化的NSMutableArray

- (id)init 
{ 
    self = [super init]; 
    if (self) { 
    _variablesArray = [NSMutableArray array]; 
    } 
    return self; 
} 
0

嘿,你可以在另一個類的變量的簡單製作財產這樣

@property訪問變量(非原子,強)NSString * str;

我給了一個Answer接近這個請檢查此鏈接