我在遗留应用程序上工作,并且发现我的view[Will/Did]Disappear方法并不总是被正确解雇.
情况是,我UIViewController在AppDelegate中将(自定义)设置为rootViewController.这个rootViewController有一个UINavigationController,它上面有两个视图控制器.当用户按下主页按钮时,用户退出.当他稍后返回应用程序时,应用程序调用[UINavigationController popToRootViewControllerAnimated:YES]然后显示UIViewController用于登录的模式.
问题是:当我UINavigationController正常推/弹时,我的viewWillDisappear方法被正确调用.但是当我使用该popToRootViewControllerAnimated:方法时,viewWillDisappear不会弹出任何弹出的viewControllers.
在互联网上搜索只有两个可能的原因:
我的应用程序中没有这些建议.我不知道在哪里看.有人建议应用中出错了吗?
我刚刚在我的项目中添加了cocoapods,但无法让我的构建脚本再次运行.我使用此命令进行构建:
xcodebuild -workspace MyProject.xcworkspace -scheme MyScheme SYMROOT=./build
Run Code Online (Sandbox Code Playgroud)
但是,当我执行构建时,它会失败并显示错误消息ld: library not found for -lPods.
如果我在没有SYMROOT设置的情况下构建,它可以正常工作.但我更希望保持SYMROOT参数,以便我可以像以前一样保持我的归档逻辑.
到目前为止,我的结论是,因为SYMROOT已设置,xcodebuild无法找到构建的Pods库.我怎样才能解决这个问题?
编辑:
我在构建之后调查了文件结构:
Library/Developer/Xcode/DerivedData/MyProject-eegsyonkmltdqhggwyqytoqbwath/Build/Products/)的libPods.a文件.因此,似乎没有正确设置pod文件的构建输出.这是xcodebuild中的一个问题,还是有一种方法可以确保将pod文件构建到此文件夹中?
下图显示了两个目录中的构建输出的比较,以使其更清晰:

我在Localizable.strings文件中编写了很多本地化文本,我正在寻找一种方法来使用它们并在界面构建器中显示它们.也就是说,不是为我的所有视图创建出口并在代码中设置文本,我想创建一个IB_DESIGNABLEUILabel子类,它必须访问我的Localizable.strings文件,然后直接在界面构建器上显示本地化文本.
问题是,NSLocalizedString在接口构建器中没有给出任何结果,但仅在我实际运行代码时.有没有办法告诉界面构建器用于本地化的文件(例如在prepareForInterfaceBuilder中)?
是否可以在 Swift 中覆盖全局函数?
具体来说,我想覆盖NSLocalizedString. 这在 Objective-c ( #undef/ #define) 中很容易,但在 Swift 中NSLocalizedString被定义为全局函数,我找不到覆盖它的方法。
我可以创建自己的函数MyLocalizedString,它调用原始函数,NSLocalizedString但随后我将失去 AppCode 对 Localizable.strings 文件的巧妙支持(本地化键的自动完成,IDE 显示本地化文本),我必须确保每次使用NSLocalizedString我的代码中的of被替换为MyLocalizedString.
编辑:我想达到什么目标?我希望能够动态更改 GUI 中的字符串。最简单的方法是重新定义 NSLocalizedString,然后自己在表中查找字符串。如果它不存在,我将使用 Localizable.strings 中的原始字符串。
我在我的应用程序中使用Core Data,并发现了模拟器的一些奇怪的行为:当我在我的应用程序中向Core Data添加一些数据并使用XCode中的"stop"按钮退出模拟器时(或者只是按下Cmd-Q),下次启动模拟器时,数据不会存储在数据库中.经过一些测试,我发现数据存储到磁盘:
调用[NSManagedObjectContext save:]无效.行为是一样的.
所以我的问题是:这种行为的原因是什么?在退出之前有没有办法强制刷新到磁盘?当在设备上运行时,我是否有以这种方式丢失数据的风险(个人而言,我没有看到任何,除了强制关闭,但奇怪的行为困扰我一点)
我在一个应用程序上工作,我的视图有问题[Will/Did]消失方法在返回应用程序时没有被触发.
案例是,我有UINavigationController,它上面有两个视图控制器.当用户按下主页按钮时,用户退出.当他稍后返回应用程序时,以下(简化)代码在我的AppDelegate中运行:
- (void)applicationDidBecomeActive:(UIApplication *)application
{
[(UINavigationController *)self.window.rootViewController popToRootViewControllerAnimated:NO];
[self.window.rootViewController presentModalViewController:loginViewController animated:NO];
}
Run Code Online (Sandbox Code Playgroud)
当我弹出导航控制器堆栈上的视图控制器时,我希望view[will|did]disappear可以调用这些方法.然而,事实并非如此,因为当iOS要解雇这些方法时,它们(显然)不再出现在屏幕上.似乎模态视图控制器已经接管了.
如果我不提供模态视图控制器,则按view[will|did]disappear预期调用方法.
我的问题是:如果我想view[will|did]disappear调用这些方法,那么我该如何构建我的代码呢?有没有更好的地方来呈现我的模态loginViewController?
编辑:
为了更清楚地显示我的问题,我在这里创建了一个非常简单的测试项目:https://github.com/JohanVase/ModalViewCauseMissingViewDisappearCalls.请尝试几次按照应用程序中的说明操作,看看我没有在viewWillDisappear方法中发布我的"资源".
objective-c uinavigationcontroller presentmodalviewcontroller ios appdelegate
objective-c ×4
ios ×2
appdelegate ×1
cocoapods ×1
core-data ×1
ios5 ×1
swift ×1
xcode5 ×1
xcode6 ×1