2012-08-12 15 views
5

में CKContentEntryView से UIView _subjectLine को लेने का प्रयास कर रहा है, मैं संदेश ऐप में विषय पंक्ति पर नियंत्रण रखने की कोशिश कर रहा हूं। अभी मैं विषय फ़ील्ड में टेक्स्ट प्रदर्शित करने की कोशिश कर रहा हूं।थीओस: चैटकिट

मेरे पास मुख्य मुद्दा है कि संकलक को _subjectLine मान्य दृश्य के रूप में पहचानने के लिए है।

Tweak.xm:8: error: ‘_subjectLine’ was not declared in this scope 

मैं कैसे एक ट्वीक में उपयोग करने के लिए पहले से मौजूद किसी आइटम घोषित करने के लिए किसी भी विचार की जरूरत नहीं है: यह है कि अगर मैं कोशिश करते हैं और के लिए कुछ भी/_subjectLine साथ मैं क्या मिलता है। एक्सकोड में उपयोग की जाने वाली मानक घोषणाएं, आमतौर पर एक हेडर फ़ाइल में पाई जाती हैं, ऐसा प्रतीत नहीं होता है।

मैं लगभग एक सप्ताह के लिए चारों ओर घूम रहा हूं। मुझे मिला सबसे आम ट्यूटोरियल या जानकारी बस सरल थी: जब विधि सक्रिय होती है - प्रदर्शन अलर्ट। मैं ऐसा कर सकता हूं, कोई समस्या नहीं। हालांकि, मुझे पहले से मौजूद किसी वस्तु का उपयोग करने की आवश्यकता है।

उत्तर

8

ऐसा लगता है कि आपके मामले में आप उदाहरण वैरिएबल का उपयोग करने की कोशिश कर रहे हैं। इंस्टेंस वैरिएबल को संशोधित करना इस तरह से काम नहीं करता है। आपको MSHookIvar को एक आवृत्ति चर (उर्फ ivar) 'हुक' करने के लिए उपयोग करना होगा। उदाहरण:

[Tweak.xm/मिमी]

#import <substrate.h> // necessary 
#import <Foundation/Foundation.h> 

@interface TheClassYouAreHooking : NSObject { 
    NSString *_exampleVariable; 
} 
- (void)doSomething; 
@end 

NSString *_exampleVariableHooked; 

%hook TheClassYouAreHooking 
- (void)doSomething 
{ 
    // 'Hook' the variable 

    exampleVariableHooked = MSHookIvar<NSString *>(self, "_exampleVariable"); 

    // The name of the hooked variable does not need to be the same 

    exampleVariableHooked = @"Hello World"; 

    // You can do ANYTHING with the object Eg. [exampleVariableHooked release]; 

} 
%end 

MSHookIvar भी हुक कर सकते हैं bools और तैरता आदि

exampleVariableHooked = MSHookIvar<BOOL>(self, "_someBOOL"); 

इसकी तरह सामान substrate.h में घोषित ताकि आप उस आयात करने की आवश्यकता अन्यथा आप अपने tweak संकलित करने में सक्षम नहीं होंगे। बोनस टिप के रूप में, मैं आपको बस याद दिला रहा हूं कि आपको अपने tweakname.plist में जो एप/फ्रेमवर्क लगा रहा है उसका पहचानकर्ता रखना है।

तो आप 'हुक' चर के बाद आप अपनी आवश्यकताओं के अनुरूप इसे बदल सकते हैं। हैप्पी कोडिंग!

1

मैं चैटकिट से परिचित नहीं हूं, लेकिन एक त्वरित झलक लिया। आप _subjectLine तक नहीं पहुंच सकते क्योंकि यह एक ivar है। तुम बस

id subject = [myCKContentEntryView subject]; // should return a CKTextContentView 
NSAssert([subject isKindOfClass:[CKTextContentView class]], @"ack"); 
CKTextContentView * myTextContentView = subject; 

का उपयोग करना चाहिए CKTextContentView एक setText विधि है, लेकिन पता नहीं क्या यह पैरामीटर के बाद से उम्मीद कर रहा है आईडी है। एक दृश्य हो सकता है (UILabel?) या एक स्ट्रिंग ले सकता है। आप कोशिश कर सकते हैं:

[myTextContentView setText:@"Hello World, w/ jimmies!"]; 

और देखें कि क्या होता है।

2

तुम भी तो की तरह, उदाहरण के चर का उपयोग करने के ऑब्जेक्टिव-सी क्रम कार्यों इस्तेमाल कर सकते हैं:

UIView *subjectLine; 
object_getInstanceVariable(self, "_subjectLine", (void **)&subjectLine); 
1

आप KVC उपयोग कर सकते हैं। उदाहरण: [ऑब्जेक्ट वैल्यू फोर्के: @ "जो कुछ भी"];

यह कहीं भी काम करता है, और उद्देश्य सी रनटाइम विधियों या मोबाइल सब्सट्रेट का उपयोग करने से क्लीनर है।

+0

लेकिन एक वर्ग केवीसी विधियों को ओवरराइट कर सकता है और इसे बेकार/अनुपयोगी प्रदान कर सकता है। – Aehmlo