问这样的问题我觉得很蠢,但我似乎无法弄明白.我有一个我在Xcode 4.0.2中编写的应用程序,它针对Mac OS X.如何将其编译为应用程序包(.app),以便我可以让人们进行测试?
提前致谢.
如何获取特定类的类方法列表?我已经尝试使用class_copyMethodList声明的函数<objc/runtime.h>,但这只是给我实例方法.我还找到了一个函数,它给了我一个类方法的方法,但前提是我有方法的选择器first(class_getClassMethod).
有任何想法吗?
谢谢,
戴夫
有人可以解释一下如何将值传递给使用时被拦截的不存在的方法:
+ (void)forwardInvocation:(NSInvocation *)anInvocation;
+ (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector;
Run Code Online (Sandbox Code Playgroud)
给出如下消息:
[SomeClass doSomething:@"theThing" withSomething:@"aParam"];
Run Code Online (Sandbox Code Playgroud)
我可以毫无问题地获得方法签名,但我对如何获取传入的值非常困惑.
当我应该使用这些方法或者只是遗漏某些东西时,我完全偏离了基础吗?
是否可以采用现有的NSPredicate并为其添加额外的参数?
在我的一个tableviews中,我传递的是NSPredicate,用于我的NSFetchedResultsController,如下所示:
[fetchedResults setPredicate:self.predicate];
Run Code Online (Sandbox Code Playgroud)
这工作正常,将根据现有的NSPredicate显示内容.但我想通过向tableView添加UISegmentedControl来更进一步.
- (IBAction)segmentChange:(id)sender {
switch (selectedSegment) {
case kDisplayDVD:
// Add argument to existing NSPredicate
break;
case kDisplayVHS:
// Add argument to existing NSPredicate
break;
default:
break;
}
Run Code Online (Sandbox Code Playgroud)
根据用户选择的细分,我想在现有的NSPredicate中添加一个参数.这是可能吗?
我需要执行我认为的基本功能,但我找不到任何关于如何操作的文档.请帮忙!
我需要计算某个对象在数组中出现的次数.见例子:
array = NSArray arrayWithObjects:@"Apple", @"Banana", @"Cantaloupe", @"Apple", @"DragonFruit", @"Eggplant", @"Apple", @"Apple", @"Guava",nil]retain];
Run Code Online (Sandbox Code Playgroud)
如何迭代数组并计算它找到字符串@"Apple"的次数?
任何帮助表示赞赏!
Objective-C中是否存在任何反射方法,允许您通过检查对象的公共属性并生成encodeWithCoder:和initWithCoder的通用实现来编写通用NSCoding实现:.
我正在考虑像XStream for Java这样的东西,它允许使用反射对Java对象进行序列化和反序列化的通用方法.更好的方法可能是将属性标记为您想要序列化的东西或者是瞬态的(比如Java中的transient关键字).
我一直在阅读有关Cocoa的Archives and Serializations Programming Guide的文档.我知道您希望对对象的序列化进行一些控制,但它通常是一个对称的过程,并且必须反转为序列化编码的内容以反序列化它似乎很奇怪.我是DRY的信徒(不要重复自己).
iphone reflection serialization objective-c objective-c-runtime
我们知道在Objective-C中有两个主要的根类: NSObject和NSProxy.还有其他根(主要用于私人和遗留目的),如Object和NSLeafProxy.
定义一个新根是相当简单的:
@interface DDRoot <NSObject>
@end
@implementation DDRoot
//implement the methods required by <NSObject>
@end
Run Code Online (Sandbox Code Playgroud)
我的问题是:你为什么要定义一个新的根类?是否有必要使用某些用例?
我有这个代码来掩盖图像.基本上,我只使用PNG图像.所以我有一个300x400的PNG图像,24位色(PNG-24).我不确定它是否也有alpha通道.但它没有透明度.
然后,有没有alpha通道的PNG-8bit的图像掩码.它只是黑色,灰度和白色.
我创建了两个图像作为UIImage.将它们放入UIImageView时,两者都能正确显示.
然后我创建了一个UIImage,它包含了掩码操作的结果,使用以下代码:
+ (UIImage*)maskImage:(UIImage*)image withMask:(UIImage*)maskImage {
CGImageRef maskRef = maskImage.CGImage;
CGImageRef mask = CGImageMaskCreate(CGImageGetWidth(maskRef),
CGImageGetHeight(maskRef),
CGImageGetBitsPerComponent(maskRef),
CGImageGetBitsPerPixel(maskRef),
CGImageGetBytesPerRow(maskRef),
CGImageGetDataProvider(maskRef), NULL, false);
CGImageRef masked = CGImageCreateWithMask([image CGImage], mask);
return [UIImage imageWithCGImage:masked];
}
Run Code Online (Sandbox Code Playgroud)
这就是我用它做的事情:
UIImage *image = [UIImage imageNamed:@"coloredImagePNG24.png"];
UIImage *maskImage = [UIImage imageNamed:@"theMaskPNG8_Grayscale_NoAlpha.png"];
UIImage *maskedImage = [MyGraphicUtils maskImage:image withMask:maskImage];
UIImageView *testImageView = [[UIImageView alloc] initWithImage:maskedImage];
testImageView.backgroundColor = [UIColor clearColor];
testImageView.opaque = NO;
Run Code Online (Sandbox Code Playgroud)
毕竟,coloredImagePNG24.png保持原样完好无损.没有掩盖正在发生.但现在奇怪的是:如果我把它转过来,即使用这个图像作为蒙版,并将蒙版作为彩色图像到蒙版,那么我会得到灰度非常难看的东西(但是蒙版;)).
知道我的代码有什么问题吗?
更新:我只是用谷歌搜索一个不同的黑白png用它作为掩码.然后这个工作了!但我自己制作的那个不起作用.所以我假设代码有很大的图像解码问题.我必须将图像"规范化"为特定格式,以便它可以工作.
我有几个网站: example.com,example1.com,和example2.com.所有这些都指向我的服务器/public_html文件夹,这是我的Apache根文件夹.
.htaccess仅当用户来自时,我需要添加到我的文件中才能使用http身份验证example2.com? example.com并且example1.com不应该使用身份验证.
我知道我需要类似的东西
AuthType Basic
AuthName "Password Required"
AuthUserFile "/path/to/.htpasswd"
Require valid-user
Run Code Online (Sandbox Code Playgroud)
但是我只想在用户访问时要求输入密码example2.com.
编辑
使用答案中建议的方法,我在.htaccess文件中有以下内容:
SetEnvIfNoCase Host ^(.*)$ testauth
<IfDefine testauth>
RewriteRule ^(.*)$ index2.php?q=$1 [L,QSA]
</IfDefine>
Run Code Online (Sandbox Code Playgroud)
我知道mod_setenvif.c模块已启用(我使用<IfModule>块验证),但似乎"testauth"永远不会定义,因为我的测试验证(重定向到index2.php)没有执行(而它是在我的<IfModule>块中执行的.有什么想法吗?
我正在寻找一种方法来NSInvocation调用特定的IMP.默认情况下,它调用IMP它可以找到的"最低" (即最近被覆盖的版本),但是我正在寻找一种方法让它IMP在继承链中从更高的位置调用它.在IMP我想要调用动态确定,否则我可以使用super关键字或类似的东西.
我的想法是使用-forwardInvocation:机制来捕获消息(简单且已经工作),然后改变IMP它,所以它转到一个既不是super实现也不是最远的后代实现的方法.(硬)
我发现远程关闭的唯一东西是AspectObjectiveC,但这需要libffi,这使得它与iOS兼容.理想情况下,我希望这是跨平台的.
有任何想法吗?
免责声明:我只是在试验
试试@bbum关于蹦床功能的想法
所以我觉得我已经把事情搞得一团糟了; 我有以下蹦床,通过正确添加class_addMethod(),它确实输入:
id dd_trampolineFunction(id self, SEL _cmd, ...) {
IMP imp = [self retrieveTheProperIMP];
self = [self retrieveTheProperSelfObject];
asm(
"jmp %0\n"
:
: "r" (imp)
);
return nil; //to shut up the compiler
}
Run Code Online (Sandbox Code Playgroud)
我已经验证了正确的自我和正确的IMP在JMP之前是正确的事情,并且_cmd参数也正确地进入.(换句话说,我正确地添加了这种方法).
然而,事情正在发生.我有时会发现自己跳到了零的方法(通常不正确的)self和_cmd.其他时候我只是在EXC_BAD_ACCESS的中途崩溃.想法?(自从我在汇编中做了很多事以来已经很久了...)我在x86_64上测试了这个.
objective-c ×7
cocoa ×3
iphone ×3
.htaccess ×1
apache ×1
arrays ×1
cocoa-touch ×1
core-data ×1
count ×1
imp ×1
macos ×1
nsinvocation ×1
nspredicate ×1
reflection ×1
theory ×1
uikit ×1
xcode ×1