小编Gal*_*mon的帖子

iOS8的Autolayout问题,代码在iOS7上运行良好

我正在为iPhone和iPad开发应用程序.它支持iOS6和iOS7,并且它仅使用自动布局.

上周,当Apple宣布iOS8已经准备好迎接黄金时段时,我将其中一部iPhone和iPad升级到了iOS8.我还将我的XCODE提升到版本6.我有第二部iPhone,我在iOS7上留下了.

我用Xcode 6生成了新的可执行文件,当我在运行iOS8的设备上执行时,我看到他们的屏幕布局搞砸了,但在iOS7上仍然很好.在我的物理设备和Xcode的仿真器上都是如此.

虽然我不知道为什么,但我现在已经很清楚了解发生了什么.

具体来说,iOS8上的某些自动布局操作失败了,但在iOS7上它们没问题.

一些涉及按钮的示例,我将其放置在基本视图上,其大小等于屏幕大小:

(1)如果我要求自动布局将按钮的水平中心(CX)定位为等于基础视图的水平中心,则结果是按钮的水平中心位于基础视图的左边缘.

(2)如果我要求自动布局使按钮的宽度等于底层视图宽度的50%,则它根本没有宽度.

我能够解决这些问题如下:

(1)我要求自动布局将按钮的中心定位为等于底层视图的左边缘加上屏幕宽度的50%.

(2)我要求自动布局使按钮的宽度等于屏幕宽度的50%.

我正在慢慢地抓住我的方式,使用类似这样的解决方法,回到在iOS7和iOS8上适用于我的自动布局代码.但我真的很想知道这里发生了什么.

看起来自动布局无法确定基础视图的大小,因此需要该信息失败的自动布局计算.但它确实知道视图的顶部和左侧边缘在哪里,因此基于这些数据的计算成功.

这是一个大型应用程序,我已经为iOS6和iOS7编写了数百行自动布局代码,对我来说非常适合.

我一直在调试并尝试使用iOS8三天,而且我开始时并不比我更聪明.

任何人对这里的问题有什么建议或想法?

ios autolayout ios8

24
推荐指数
2
解决办法
1万
查看次数

MFMailComposeViewController图像方向

我正在开发一个通用应用程序,我正在为iOS6编写代码.

我正在使用imagePickerController拍摄照片,然后我使用MFMailComposeViewController将其作为附件发送.所有这些都有效.

我的问题是,当我以纵向模式拍摄照片时,MFMailComposeViewController以横向模式显示.此外,当它到达目的地电子邮件地址时,它以横向模式显示.

如果我以横向模式拍摄照片,它将以横向模式显示在MFMailComposeViewController中,当它到达目的地电子邮件地址时,它将以横向模式显示.所以没关系.

我的两个测试设备都有同样的问题; iPhone5和iPad2.

如何以纵向模式拍摄照片以纵向模式到达电子邮件目的地?

以下是我将图像添加到电子邮件的方式:

if ( [MFMailComposeViewController canSendMail] )
   {
   MFMailComposeViewController * mailVC = [MFMailComposeViewController new];
   NSArray * aAddr  = [NSArray arrayWithObjects: gAddr, nil];
   NSData * imageAsNSData = UIImagePNGRepresentation( gImag );

   [mailVC setMailComposeDelegate: self];
   [mailVC        setToRecipients: aAddr];
   [mailVC             setSubject: gSubj];
   [mailVC      addAttachmentData: imageAsNSData
                         mimeType: @"image/png"
                         fileName: @"myPhoto.png"];
   [mailVC         setMessageBody: @"Blah blah"
                          isHTML: NO];

   [self presentViewController: mailVC
                      animated: YES
                    completion: nil];
   }
else
   {
   NSLog( @"Device is unable to send email in its current state." );
   }
Run Code Online (Sandbox Code Playgroud)

email iphone image orientation ios6

13
推荐指数
1
解决办法
6290
查看次数

如果我以编程方式执行所有布局,是否需要启用Base Internationalization?

我在Obj-C编写iPhone/iPad应用程序.从一开始,我就以编程方式编写了所有布局(我使用自动布局).

所以,现在我来到我想要国际化我的应用程序的地方,我一直看到我需要打开Base Internationalization.

但是,当我读到有关Base Internationalization的内容时,我读到Base Internationalization将面向用户的代码与.storyboard和.xib文件分开.

我没有.storyboard或.xib文件.我所有面向用户的字符串都使用NSLocalizedString.

我的初步结论是,我不需要启用基础国际化,但我想把它作为一个问题放在这里,以防我错过了什么.

internationalization ios

6
推荐指数
1
解决办法
226
查看次数

为什么/如何controllerDidChangeContent 工作?

我正在编写 iOS 6.1 代码并学习如何使用 Core Data。

\n\n

fetchedObjects 的文档说:

\n\n

“结果数组反映了控制器\xe2\x80\x99s托管对象上下文中托管对象的内存状态,而不是它们在持久存储中的状态。但是,返回的数组不会在插入、修改托管对象时更新,或删除。”

\n\n

最后一句话与我所看到的有关。

\n\n

即,我从实体中获取数据,对获取的对象进行计数(fetchedObjects.count),然后得到我所期望的结果。

\n\n

然后我创建一个新对象并保存它,然后再次执行 fetchedObjects.count 并得到与上次相同的结果 - 没有像我预期的那样增加 1。

\n\n

所以,我的问题是如何在保存上下文后更新 fetchedObjects。

\n\n

我在这里阅读了有关使用 NSFetchedResultsControllerDelegate 的信息,并尝试了一些建议,即我使用委托。

\n\n

我指定自己为代表。

\n\n
 frc.delegate = self;\n
Run Code Online (Sandbox Code Playgroud)\n\n

我像这样添加了委托:

\n\n
@interface DB : NSObject <NSFetchedResultsControllerDelegate>\n
Run Code Online (Sandbox Code Playgroud)\n\n

我像这样实现了委托回调:

\n\n
- (void) controllerDidChangeContent: (NSFetchedResultsController *) controller\n    {\n    ;\n    }\n
Run Code Online (Sandbox Code Playgroud)\n\n

这一切都奏效了。但我不明白为什么。

\n\n

如果我删除上面的三位委托代码,则当我创建新对象、保存上下文然后执行 fetchedObjects.count 时,我的代码会失败。由于计数不足一而失败。

\n\n

如果我添加回 NSFetchedResultsControllerDelegate 和 frc.delegate = self; 位并省略回调例程,它仍然失败。

\n\n

只有当我也添加回调例程(顺便说一句,它没有任何功能)时,我的代码才会成功。

\n\n

这让我有点偏执 - 就像想知道如果回调什么都不做,为什么它会起作用,以及如果这会在 99% 的时间起作用,然后万一失败一次?

\n\n

因此,我创建了一个布尔值,并将其设置在回调例程中,这样我的代码在看到布尔值翻转之前不会执行保存后计数。但是,我认为这可能是多余的 …

delegates core-data ios

2
推荐指数
1
解决办法
4289
查看次数