我有一個NSMutableArray
中,我想用來存儲一些CGRect
S:的iOS:@encode和使用直接訪問子類的屬性 - >
所以,我嘗試使用以下(舉例):
UIView *view = [[UIView alloc] initWithFrame:(CGRect){{0, 0}, 50, 50}];
[array1 addObject:[NSValue value:&view->frame withObjCType:@encode(CGRect)]];
但是這是導致警告:&view->frame
這是一個屬性,但我想直接訪問它,這樣我可以用上面的語法和使用它像上面的value:
參數。
我知道我可以訪問&self->_view
(如果我想將視圖添加到陣列,這是不是這裏的情況),所以我嘗試&view->frame
(甚至&view->_frame
),但它造成的警告並不起作用。
會,除非我所以下面的第一:
CGRect tempRect = view.frame;
[array1 addObject:[NSValue value:&tempRect withObjCType:@encode(CGRect)]];
所以我的問題是,我做了什麼錯在這裏與&view->frame
(或甚至:&view->_frame
)?
而是有辦法做到這一點,而不必首先做到這一點:
CGRect tempRect = view.frame;
[array1 addObject:[NSValue value:&view->frame withObjCType:@encode(CGRect)]];
換句話說,我可以簡單地使用強制這裏,而無需首先創建一個CGRect
(tempRect) ?
附錄:
如果我沒有記錯,我想用C鑄造上&
是無效的。我不確定,請讓我知道我的記憶是否正確。
這看起來真的很邪惡。爲什麼不使用NSValue的CGRect類別? https://developer.apple.com/library/ios/documentation/uikit/reference/NSValue_UIKit_Additions/Reference/Reference.html –
你不能使用'view-> frame'或'view - > _frame',因爲'UIView'沒有實例變量框架或_frame在其公共接口中! - 如Stefan所說,使用'valueWithCGRect:'是最好的解決方案。 –
@StefanFisk你能解釋它的邪惡嗎? – Unheilig