मैं एक श्रेणी NSAttributedString (परिवर्धन) का उपयोग कर रहा हूं और मुझे वास्तव में एक ऐसी संपत्ति जोड़ने का एक तरीका चाहिए जो स्ट्रिंग HTML टैग है या नहीं, तो एक बूल होगा। मुझे पता है कि श्रेणियों में संपत्ति नहीं होनी चाहिए, लेकिन जिस तरह से मुझे इसे करने की ज़रूरत है। मैं अपने खुद के गेटर्स और सेटर्स लिखने थक गया लेकिन यह काम नहीं किया। कोई भी जानता है कि यह कैसे काम करेगा?एक श्रेणी में BOOL संपत्ति कैसे जोड़ें?
उत्तर
श्रेणियां केवल-पढ़ने योग्य गुण हो सकती हैं, आप केवल उनके साथ इंस्टेंस चर जोड़ नहीं सकते हैं (ठीक है, आप सॉर्ट कर सकते हैं - सहयोगी संदर्भ देखें)।
आप एक श्रेणी विधि (केवल पढ़ने की संपत्ति द्वारा प्रस्तुत) जोड़ सकते हैं isHTMLTag
जो एक बूल लौटाएगा, आपको गणना करना होगा कि क्या यह उस विधि के भीतर हर बार एक HTML टैग था या नहीं।
आप के लिए एक रास्ता के लिए पूछ रहे हैं, तो सेट बूल मान तो आप संबद्ध संदर्भ (objc_setAssociatedObject
) जो मैं बहुत उपयोग नहीं किया है किसी भी अधिक विस्तार में पर जवाब देने के लिए योग्य नहीं लग रहा है का उपयोग करना होगा।
संबंधित संदर्भों का उपयोग काम किया! धन्यवाद – Mace
आप साझा करते हैं कि आप इसे वास्तव में कैसे काम करते हैं? –
@ मैस - क्या आप या तो जर्टूरटन के जवाब को स्वीकार कर सकते हैं, और यहोशू से विवरण जोड़ सकते हैं, या यहोशू के जवाब को स्वीकार कर सकते हैं ...? –
यदि आपको वास्तव में कोई संपत्ति जोड़ने की आवश्यकता है, तो आपको श्रेणी जोड़ने के बजाय उप-वर्ग बनाना चाहिए।
@interface एक वस्तु कुंजी की आवश्यकता के बिना
@interface ClassName (CategoryName)
@property (readwrite) BOOL boolProperty;
@end
@implementation
#import <objc/runtime.h>
static char const * const ObjectTagKey = "ObjectTag";
@implementation ClassName (CategoryName)
- (void) setBoolProperty:(BOOL) property
{
NSNumber *number = [NSNumber numberWithBool: property];
objc_setAssociatedObject(self, ObjectTagKey, number , OBJC_ASSOCIATION_RETAIN);
}
- (BOOL) boolProperty
{
NSNumber *number = objc_getAssociatedObject(self, ObjectTagKey);
return [number boolValue];
}
@end
कभी-कभी यह संभव नहीं है। उदाहरण के लिए, यदि कोड जो कहा वर्ग का उदाहरण बनाता है वह सुलभ नहीं है (उदा। एक स्थिर पुस्तकालय में)। –
पूर्णता के लिए के लिए, यह कैसे मैं इस काम मिल गया है और वाक्यविन्यास पढ़ने के लिए थोड़ा आसान
एनएसएसटींग + सहायता er.h
#import <Foundation/Foundation.h>
@interface NSString (Helper)
@property (nonatomic, assign) BOOL isHTML;
@end
NSString + Helper.h
#import "NSString+Helper.h"
#import "objc/runtime.h"
@implementation NSString (Helper)
- (void)setIsHTML:(BOOL)isHTML
{
NSNumber *isHTMLBool = [NSNumber numberWithBool:isHTML];
objc_setAssociatedObject(self, @selector(isHTML), isHTMLBool, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
- (BOOL)isHTML
{
NSNumber *isHTMLBool = objc_getAssociatedObject(self, @selector(isHTML));
return isHTMLBool.boolValue;
}
@end
मेमोरी प्रबंधन के बारे में क्या? NSNumber इंस्टेंस को स्वयं -setBoolProperty के भीतर स्वयं द्वारा बनाए रखा जाता है: विधि। क्या मुझे इसे किसी भी तरह रिलीज करने की ज़रूरत है? Runtime.h से: "@param मान ऑब्जेक्ट के लिए कुंजी कुंजी के साथ संबद्ध करने के लिए मान। मौजूदा एसोसिएशन को साफ़ करने के लिए पास करें।" लेकिन मैं एक श्रेणी में dealloc ओवरराइड नहीं कर सकता। – igrek
यहां एक उत्तर मिला: http://stackoverflow.com/questions/10842829/will-an-associated-object-be-released-automatically/10843510#10843510 यह ठीक से जारी किया गया है – igrek
वैसे, आप अतिरिक्त स्थिरांक का उपयोग कर छोड़ सकते हैं कुंजी के लिए; इसके बजाय, ऑब्जेक्टटाग्की के बजाय बस @ सेलेक्टर (बूलप्रोपर्टी) का उपयोग करें, जो आपको – igrek
मेरे समाधान:
शायद बहुत इस दुनिया में देर हो गई, जब तेजी से पहले से ही व्यापक है उद्देश्य सी। किसी भी तरह, एक्सकोड 8 के साथ, आप सहयोगी संदर्भों का उपयोग करने के बजाय कक्षा गुणों का भी उपयोग कर सकते हैं।
@interface ClassName (CategoryName)
@property (class) id myProperty;
@end
@implementation
static id *__myProperty = nil;
+ (id)myProperty {
return __myProperty;
}
+ (void)setMyProperty:(id)myProperty {
__myProperty = myProperty;
}
@end
Xcode 8 रिलीज नोट्स से:
ऑब्जेक्टिव-सी अब वर्ग गुण, जिसके साथ स्विफ्ट प्रकार गुण interoperate का समर्थन करता है। उन्हें इस प्रकार घोषित किया गया है: @property (वर्ग) एनएसएसटींग * कुछ स्ट्रिंगप्रोपर्टी; वे कभी संश्लेषित नहीं होते हैं। (23891898)
स्विफ्ट 3:
इस पद्धति का उपयोग करके आप किसी भी नए संपत्ति जोड़ सकते हैं रोमांचक वर्ग के लिए (यहाँ बूल मान जोड़ें)।
import ObjectiveC
private var xoAssociationKey: UInt8 = 0
extension <ClassName> {
var <propertyName>: Bool! {
get {
if let returnVal = objc_getAssociatedObject(self, &xoAssociationKey) as? Bool{
return returnVal
}else{
return false
}
}
set(newValue) {
objc_setAssociatedObject(self, &xoAssociationKey, newValue, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN)
}
}
}
- 1. bool संपत्ति आवश्यक
- 2. एक वर्ग श्रेणी में अधिभावी संपत्ति सेटर
- 3. एक सूची में संपत्ति जोड़ें?
- 4. एक BOOL संपत्ति का उपयोग करना
- 5. log4net संदेश में श्रेणी उपसर्ग कैसे जोड़ें?
- 6. Magento में किसी श्रेणी में कस्टम छवि फ़ील्ड कैसे जोड़ें?
- 7. फ्लेक्स लाइब्रेरी में संपत्ति कैसे जोड़ें?
- 8. वर्डप्रेस में प्रत्येक श्रेणी में छवि कैसे जोड़ें?
- 9. क्लास एक्सप्लोरर के बिना संपत्ति मानचित्र में संपत्ति कैसे जोड़ें?
- 10. श्रेणी विस्तार के माध्यम से एनएसएमयूटेबलएरे में गुण कैसे जोड़ें?
- 11. BOOL परिवर्तनीय
- 12. bool
- 13. उदाहरण के बिना एक संपत्ति जोड़ें?
- 14. मेरे वैध संपत्ति मार्ग में विक्रेता/संपत्ति/जावास्क्रिप्ट जोड़ें
- 15. प्रमाणन च (च bool) bool
- 16. स्ट्रिंग एक bool
- 17. हाइबरनेट: मेरी कक्षा में एक संपत्ति जोड़ें जो डीबी-टेबल
- 18. , श्रेणी
- 19. संपत्ति के मूल्य के अंत में अंतरिक्ष में कैसे जोड़ें
- 20. रनटाइम पर POCO क्लास में संपत्ति जोड़ें
- 21. संपत्ति पाइपलाइन पथ में फ़ोल्डर जोड़ें?
- 22. कैसे पूर्णांक या bool
- 23. कैसे एक अधिरोहित संपत्ति
- 24. कक्षा में अवैध श्रेणी: अपवाद: ..., संपत्ति का गेटर विधि: आईडी
- 25. लाभ :: एमपीएल :: एक स्थिरांक bool
- 26. UITableViewCell में एक कस्टम सेपरेटर कैसे जोड़ें?
- 27. एक श्रेणी में एक नोड मॉडलिंग
- 28. इकाई फ्रेमवर्क में एक कस्टम संपत्ति जोड़ना?
- 29. WPF कस्टम नियंत्रण के लिए संपत्ति श्रेणी सेट करें?
- 30. परोक्ष 'bool'
[उद्देश्य-सी: श्रेणी में संपत्ति] के संभावित डुप्लिकेट (http: // stackoverflow।कॉम/प्रश्न/8733104/उद्देश्य-सी-संपत्ति-श्रेणी में) –
अपने गेटर्स और सेटर्स के लिए कोड पोस्ट करें! – paulmelnikow