我想启动一个服务器请求,你可以取消.
我的想法是在一个线程中启动请求,以便用户界面不会冻结.因此,您可以通过单击"取消"按钮来终止包括请求在内的整个线程.
使用Android它可以工作:服务器请求在"AsyncTask"和"onReturn()"中启动 - 方法我可以在服务器请求完成后立即做出反应.
如何在iOS上使用Objective-C实现这一点?我的第一次尝试是"NSInvocationOperation".您可以取消操作,但在请求完成且结果可用时很难处理.我认为NSInvocationOperation不是我的问题的解决方案.
你会推荐给我吗?NSThread是我的正确选择吗?
非常感谢你!
我有一个NSOpenPanel.但我想让它只能选择PDF文件.我正在寻找类似的东西:
// NOT WORKING
NSOpenPanel *panel;
panel = [NSOpenPanel openPanel];
[panel setFloatingPanel:YES];
[panel setCanChooseDirectories:YES];
[panel setCanChooseFiles:YES];
[panel setAllowsMultipleSelection:YES];
[panel setAllowedFileTypes:[NSArray arrayWithObject:@"pdf"]];
int i = [panel runModalForTypes:nil];
if(i == NSOKButton){
return [panel filenames];
}
Run Code Online (Sandbox Code Playgroud)
我希望someboby有一个解决方案.
我们知道在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)
我的问题是:你为什么要定义一个新的根类?是否有必要使用某些用例?
我有控制器实现UIAlertViewDelegate.在实施中,我有:
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
Run Code Online (Sandbox Code Playgroud)
方法.当我创建UIAlertView时,我将'委托'放到'self'中,它运行正常.但问题是,现在我还有一个警报视图,我希望每个视图都有不同的行为.那么如何检查哪个alertView发送消息?
我希望我能找到答案.我搜索并搜索过,但答案不对.这是我的情况:
在Mac OS Cocoa应用程序中,我想在我的应用程序窗口的专用区域上绘制一个像素(实际上是几个像素).我想,NSImageView放在那里会更好(我用IB做了这个并将插座连接到我的应用代表)然后用它代替我的NSWindow.
我怎么能这样做呢?Mac OS似乎提供NSBezierPath了最基本的绘图工具 - 这是真的吗?这对我来说是完全令人震惊的.我来自Windows编程的悠久历史,并且通常在画布上绘制像素是最简单的事情.
我不想使用OpenGL,我不确定Quartz参与的程度如何.
我想要的只是帮助我如何在真正的Objective-C/Cocoa中实现这个伪代码:
imageObj.drawPixel(10,10,blackColor);
Run Code Online (Sandbox Code Playgroud)
我很想听听你的回答,我相信这会帮助很多人从Cocoa开始.
谢谢!
我用4.0 sdk开始iphone开发.我想让我的应用程序与3.2兼容.我意识到 - [UIWindow setRootViewController:]被添加到版本4.0中的sdk.所以我应该在4.0之前的版本中使用什么呢?换句话说,除了分配窗口的主要子视图外,rootViewController属性本质上做什么?如果我扩展UIWindow并重新定义下面的方法,将来会出现问题吗?
- (void) setRootViewController:(UIViewController *)controller
{
if (systemVersion < 4.0)
{
while(self.subviews.count > 0)
[[self.subviews objectAtIndex:0] removeFromSuperview];
[self addSubview:controller.view];
}
else [super setRootViewController:controller];
}
Run Code Online (Sandbox Code Playgroud) 是否可以在cocoa touch中根据gps的坐标获取设备的本地时区?去年我看到了这个,但没有回答......
我真正想要的是与GMT的小时数差异,我不想查询Web服务.
或者,我可以询问设备设置的时区吗?
可以吗?
我有三个整数
int myI1 = 33;
int myI2 = 44;
int myI3 = 22;
Run Code Online (Sandbox Code Playgroud)
我想确定什么是最高的,哪个是使用Objective-C的最低值
我不知道要走哪条路...... NSArray,int array或其他东西.我知道我可以继续比较这些值,但我正在寻找更优雅和/或更通用的方法.
谢谢!
在Objective-C块的实现中调用超级方法吗?
当我在super上调用一个方法时,会抛出一个EXC_BAD_ACCESS错误但是只要我将这些调用改为[super methodToCall],[self methodToCall]并让消息向上移动响应者链就可以了.
-methodToCall在该类的实例中没有该块存在的实现,但是在超类中有一个(即,自己继承自的类).
我只是好奇地了解为什么在一个块的实现中调用一个方法在一开始是一个问题(技术上),所以我可以在将来避免它.我怀疑它与块中如何捕获变量以及堆栈和堆有关,但我真的没有具体的想法.
注意:在块存储在属性中之后几秒钟就会调用块实现代码,该属性使用copy,所以我不认为这是块的生命周期的问题,所有看起来都没问题.此外,这只是在iPhone设备(3G)上崩溃,但在iPhone模拟器中没有崩溃.
结果EXC_BAD_ACCESS:
[self retrieveItemsForId:idString completionHandler:^(NSError *error) {
if (!error) {
[super didRetrieveItems];
} else {
[super errorRetrievingItems];
}
}];
Run Code Online (Sandbox Code Playgroud)
完美,实现-didRetrieveItems和-errorRetrievingItems超级类.
[self retrieveItemsForId:idString completionHandler:^(NSError *error) {
if (!error) {
[self didRetrieveItems];
} else {
[self errorRetrievingItems];
}
}];
Run Code Online (Sandbox Code Playgroud) Objective-C不支持方法重载.
为什么?
是否可行,但Apple决定不实施它?或者由于Objective-C的动态特性,它是不可行的?
我的印象是方法重载可以在编译语言(Java,C#)上完成,而不能在解释语言(Ruby,Python)上完成.
有一些真实的吗?
objective-c ×10
iphone ×4
cocoa ×3
cocoa-touch ×2
ios ×2
block ×1
gps ×1
macos ×1
nsimageview ×1
nsopenpanel ×1
overloading ×1
pixel ×1
request ×1
theory ×1
uialertview ×1