SudzC ARC版本 – objc_msg发送调用导致使用64位架构的EXC_BAD_ACCESS

编辑 – 我已经跟踪下面的问题到64位和32位体系结构的问题…看到我已发布的答案我如何解决 我使用SudzC为Web服务生成SOAP代码。 他们提供了一个示例应用程序,我可以在设备和模拟器上成功使用。 然后我开始构build我的应用程序。 我使用空白的应用程序模板(启用了CoreData和ARC)将SudzC生成的文件导入到一个新的XCode项目中。 我得到了第一个SOAP请求,并运行 – 一切工作在模拟器 – 然后我去做一个设备(iPhone 5S运行iOS 7.02)的第一次testing。 每次运行SOAP请求时,设备都会引发EXC_BAD_ACCESS错误。 我跟踪到了SoapRequest.m文件,特别是connectionDidFinishLoading方法。 此方法使用objc_msgSend调用将SOAP响应数据发送回另一个类(本例中为视图控制器)中的处理程序方法。 代码如下: SoapRequest.m: – (void)connectionDidFinishLoading:(NSURLConnection *)connection { NSError* error; if(self.logging == YES) { NSString* response = [[NSString alloc] initWithData: self.receivedData encoding: NSUTF8StringEncoding]; NSLog(@"%@", response); } CXMLDocument* doc = [[CXMLDocument alloc] initWithData: self.receivedData options: 0 error: &error]; if(doc == nil) […]

如何缩放UICollectionViewCell中的UIScrollView?

我正在尝试在UICollectionViewCell添加一个UIScrollView 。 这个想法是,你可以使用捏来缩放UIScrollView (和它,图像内),但滚动视图似乎不处理任何手势。 我猜他们正在被UICollectionView 。 我已经将UIScrollView的委托设置为UICollectionViewCell ,但是没有一个委托方法正在被调用。 编辑:我做了一个github回购代码(尽可能简化我)。 即使这只是几行代码,我看不出我做错了什么。 编辑2:答案被发现后,我join了上述回购修复,希望别人也发现它也有帮助:) https://github.com/krummler/gallery-pinchzoom-example

你如何真正从UIMenuController中删除复制

显然,当您添加多个自定义菜单项时,曾经是一种简单的方法来防止“更多…”标签出现在UIMenuController中。 你只需要删除所有的系统菜单项。 这里还有一个解决方法 ,仍然有复印工作。 您只需使用不同的select器实现自定义复制命令,然后重写canPerformAction:withSender:不显示系统副本: -(BOOL)canPerformAction:(SEL)action withSender:(id)sender { if (action == @selector(copy:)) return NO; else // logic to show or hide other things } 不幸的是,这种方法不再有效(至less在UIWebView子类中)。 canPerformAction:withSender:对除复制以外的每个系统菜单项都会调用:所以结果是始终显示系统复制菜单项。 这意味着如果您有多个自定义菜单项,则始终隐藏在“更多…”之后 那么,有没有办法真正删除系统的副本项目或一些替代的方法,以防止隐藏在“更多…”后面的菜单项? 更新 这是我重写canPerformAction时获得的输出:withSender:注意,该方法从来没有被调用“copy:”操作: cannot perform action cut: with sender <UIMenuController: 0x7227d30>. cannot perform action select: with sender <UIMenuController: 0x7227d30>. cannot perform action selectAll: with sender <UIMenuController: 0x7227d30>. cannot […]

使用Objective-C将HTML文本转换为纯文本

我有巨大的NSString与HTML文本里面。 该string的长度超过3.500.000个字符。 我怎样才能将这个HTML文本转换为纯文本内的NSString 。 我正在使用扫描仪,但工作速度太慢。 任何想法 ?

在CALayer中添加UIImage

我必须添加一个UIImageView作为MapView的子视图。 为此,我在MapView上创build了一个图层。 在这一层我想把我的形象,但我得到一个白色的矩形,没有别的。 我的图像不可见。 这是代码: – (void)viewDidLoad { //…… CALayer *layer = [CALayer layer]; layer.backgroundColor = [[UIColor whiteColor] CGColor]; if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) { layer.bounds = CGRectMake(self.mapView.bounds.origin.x, self.mapView.bounds.origin.y, 80, 300); } else { layer.bounds = CGRectMake(self.mapView.frame.origin.x, self.mapView.frame.origin.y, 150, 700); } layer.contents = (id)[UIImage imageNamed:@"myImage.png"]; //the name is correct but in the output the image is not […]

在显示推送通知和静默推送之前,推送触发后台刷新的通知

我想在我的应用程序中实现后台刷新function,当收到一个推送。 就在向用户显示推送通知之前,我想从后端(Parse.com)下载新消息并将其保存到数组中。 我正在按照以下指南进行操作: http : //developer.xamarin.com/guides/ios/application_fundamentals/backgrounding/part_3_ios_backgrounding_techniques/updating_an_application_in_the_background/ 我不确定这个指南有多准确。 它指出: iOS 7(及更高版本)通过给予应用程序在通知用户之前更新后台内容的机会来扩展普通推送通知,以便用户可以打开应用程序并立即呈现新的内容。 所以我尝试执行我的背景推这样的: – (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))handler { if([[userInfo objectForKey:@"aps"] objectForKey:@"content-available"]){ NSLog(@"Doing the background refresh"); UINavigationController *navigationController=(UINavigationController *)[[[UIApplication sharedApplication] keyWindow] rootViewController]; MyViewController *myViewController = (MyViewController *)[[navigationController viewControllers] objectAtIndex:1]; [myViewController.currentUser refreshMessagesArrayWithCompletionHandler:^(BOOL successful, BOOL newMiaos) { NSLog(@"messages refreshed the array now has %lu messages",(unsigned long)[myViewController.currentUser.messages […]

如何在Objective-C中显示PDF?

如何在Objective-C中阅读和显示PDF?

如何在UIImageView中asynchronous加载图像?

我有一个UIImageView子视图的UIView。 我需要在UIImageView中加载图像而不会阻塞UI。 阻止调用似乎是: UIImage imageNamed: 这是我想解决这个问题: -(void)updateImageViewContent { dispatch_async( dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{ UIImage * img = [UIImage imageNamed:@"background.jpg"]; dispatch_sync(dispatch_get_main_queue(), ^{ [[self imageView] setImage:img]; }); }); } 图像很小(150×100)。 但是,加载图像时UI仍然被阻塞。 我错过了什么? 这是一个小的代码示例,performance出这种行为: 创build一个基于UIImageView的新类,将其用户交互设置为YES,在UIView中添加两个实例,并实现其touchesBegan方法,如下所示: -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { if (self.tag == 1) { self.backgroundColor= [UIColor redColor]; } else { dispatch_async(dispatch_get_main_queue(), ^{ [self setImage:[UIImage imageNamed:@"woodenTile.jpg"]]; }); [UIView animateWithDuration:0.25 […]

iOS 7.1 UITextView在新行后仍然不能滚动到cursor / caret

自iOS 7以来, UITextView不会自动滚动到光标,因为用户键入stream向新行的文本。 这个问题在SO和其他地方都有很好的logging。 对我来说,这个问题在iOS 7.1中仍然存在。 我究竟做错了什么? 我安装了Xcode 5.1和iOS 7.1。 我正在使用自动布局。 以下是我如何将文本视图的内容定位在键盘上: – (void)keyboardUp:(NSNotification *)notification { NSDictionary *info = [notification userInfo]; CGRect keyboardRect = [[info objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue]; keyboardRect = [self.view convertRect:keyboardRect fromView:nil]; UIEdgeInsets contentInset = self.textView.contentInset; contentInset.bottom = keyboardRect.size.height; self.textView.contentInset = contentInset; } 我曾经尝试过:我已经尝试了许多针对这个问题的解决scheme,因为它与iOS 7有关。我尝试过的所有解决scheme对于显示属性string的文本视图似乎都不太好。 在以下三个步骤中,我概述了SO( https://stackoverflow.com/a/19277383/1239263 )上的最新推荐答案是如何响应用户第一次点击返回键的。 (1.)文本视图成为viewDidLoad的第一个响应者。 滚动到光标所在文本视图的底部。 (2.)在input单个字符之前,点击键盘上的返回键。 脱字符号消失在视线之外。 (3.)然而,再次点击返回键似乎使情况正常化。 (注:删除后面的新行,但是,使脱字符号再次消失)。

如何确切地知道UIScrollView的滚动何时停止?

总之,我需要知道滚动视图何时停止滚动。 通过“停止滚动”,我指的是不再移动而不被触摸的那一刻。 我一直在水平的UIScrollView子类(iOS 4)与select选项卡在其中。 其中一个要求是它停止滚动低于一定的速度,以允许用户更快地交互。 它也应该捕捉到一个标签的开始。 换句话说,当用户释放滚动视图并且其速度低时,它将捕捉到一个位置。 我已经实现了这个,它的工作原理,但它有一个错误。 我现在拥有的: scrollview是它自己的委托。 在每次调用scrollViewDidScroll时,刷新其速度相关的variables: -(void)refreshCurrentSpeed { float currentOffset = self.contentOffset.x; NSTimeInterval currentTime = [[NSDate date] timeIntervalSince1970]; deltaOffset = (currentOffset – prevOffset); deltaTime = (currentTime – prevTime); currentSpeed = deltaOffset/deltaTime; prevOffset = currentOffset; prevTime = currentTime; NSLog(@"deltaOffset is now %f, deltaTime is now %f and speed is %f",deltaOffset,deltaTime,currentSpeed); } […]