我正在尝试控制消息应用程序中的主题行。现在,我只想在主题字段中显示文本。
我遇到的主要问题是让编译器将_subjectLine识别为有效视图。这就是我尝试对_subjectLine执行任何操作时得到的结果
Tweak.xm:8: error: ‘_subjectLine’ was not declared in this scope我不知道如何声明一个已经存在的项目,以便在调整中使用。我在Xcode中使用的标准声明(通常可以在头文件中找到)似乎工作方式不同。
我已经用谷歌搜索了大约一个星期了。我发现的最常见的教程或信息都很简单:当方法激活时,显示警报。我可以做到,没问题。但是,我需要使用一个已经存在的对象。
发布于 2013-01-17 21:17:31
在您的示例中,您似乎正在尝试使用所挂接的类的实例变量。在微调中,修改实例变量不会以这种方式工作。你必须使用MSHookIvar来“挂钩”一个实例变量(也就是依瓦尔)。示例:
微调.xm/mm
#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];
}
%endMSHookIvar还可以钩住BOOLs和float之类的东西。
exampleVariableHooked = MSHookIvar<BOOL>(self, "_someBOOL");它是在subate.h中声明的,所以你需要导入它,否则你将无法编译你的调整。另外,作为额外的提示,我只想提醒你,你必须把你挂接的应用程序/框架的标识符放在你的tweakname.plist中。
所以在你‘钩住’这个变量之后,你可以改变它来满足你的需要。祝你编码愉快!
发布于 2013-04-06 09:21:08
您还可以使用Objective-C运行时函数来访问实例变量,如下所示:
UIView *subjectLine;
object_getInstanceVariable(self, "_subjectLine", (void **)&subjectLine);发布于 2013-01-20 01:45:54
我对ChatKit不熟悉,但我很快就看了一眼。你不能访问_subjectLine,因为它是一个依瓦尔。您只需访问
id subject = [myCKContentEntryView subject]; // should return a CKTextContentView
NSAssert([subject isKindOfClass:[CKTextContentView class]], @"ack");
CKTextContentView * myTextContentView = subject;CKTextContentView有一个setText方法,但不知道它需要什么,因为参数是id。可能是一个视图(UILabel?)或者可能需要一个字符串。您可以尝试:
[myTextContentView setText:@"Hello World, w/ jimmies!"];看看会发生什么。
https://stackoverflow.com/questions/11918934
复制相似问题