我有一个viewController,通常(通常)使用push segue访问.这个viewController需要嵌入UINavigationController中.通常,这不是问题.push segue管理推送viewController,因此viewController有它的UINavigationController.
我的问题是,在少数情况下,我想使用模态segue呈现这个相同的viewController.当我这样做时,viewController没有嵌入到navigationController中.有没有办法用segues做到这一点?
我知道这可以通过创建UINavigationController纯粹在没有segue的代码中完成,将rootView设置为viewController,然后以模态方式呈现.这可以使用这样的代码完成:
MyViewController *viewController = [[MyViewController alloc] init];
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:viewController];
[self presentModalViewController:navController animated:YES];
Run Code Online (Sandbox Code Playgroud)
但是我如何使用Segues做同样的事情呢?
为了进一步说明,这里有一些代码来补充我在prepareForSegue方法中使用接受的答案的方式.
使用模态瞄准时
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([[segue destinationViewController] isEqualToString:@"Modal to MyVC"])
{
UINavigationController *nav = [segue destinationViewController];
MyViewController *vc = [nav topViewController];
//setup vc
}
}
Run Code Online (Sandbox Code Playgroud)
使用Push Segue时
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([[segue destinationViewController] isEqualToString:@"Push to MyVC"])
{
MyViewController *vc = [segue destinationViewController];
//setup vc
}
}
Run Code Online (Sandbox Code Playgroud) 我有一个NSOperationQueue,它将对象导入Core Data,这是我从web api获得的.每个操作都有我的应用程序的主要managedObjectContext的私有子managedObjectContext.每个操作都会获取要导入的对象,并检查该对象是否已存在,在哪种情况下它会更新现有对象.如果该对象不存在,则创建此新对象.然后,私有子上下文的这些更改将传播到主要托管对象上下文.
这个设置对我来说非常好用,但是有一个重复的问题.
当我在两个不同的并发操作中导入相同的对象时,我得到具有完全相同数据的重复对象.(它们都检查对象是否存在,并且它们看起来不存在).我将在同一时间导入2个相同对象的原因是我经常处理"新"api调用以及"获取"api调用.由于我的设置同时具有异步性质,因此很难确保我不会尝试导入重复的对象.
所以我的问题是解决这个特定问题的最佳方法是什么?我考虑过限制导入到最大并发操作为1(由于性能,我不喜欢这样).类似地,我考虑在每次导入操作之后要求保存并尝试处理上下文的合并.另外,我之后考虑过修饰数据以偶尔清理重复数据.最后,我考虑过只处理所有获取请求的重复项.但是这些解决方案对我来说都不是很好,也许我已经看过一个简单的解决方案了.
multithreading core-data objective-c nsoperation nsmanagedobjectcontext
问题:
我即将实现语言本地化到已经非常大的ipad应用程序,该应用程序是使用包含在phonegap中的sencha touch构建的.我在json文件中有英文和西班牙文翻译.
我正在计划做什么:
我计划将json文件加载到sencha触摸存储中,创建一个全局对象.然后在我调用显示的文本的每个地方,我将通过调用全局对象替换文本.
我的问题:
有没有更简单的方法来实现我的设置语言本地化?
我会遇到本机sencha的问题(比如datepickers)吗?
加载/重新加载语言json文件时,是否会出现性能问题(需要webview重新加载?,sencha对象调整大小等问题)
编辑1:有用的相关信息:
对于那些沿着这条路走下去的人来说,编写一个简单的phonegap插件以便将ipad/iphone设备的语言设置变成你的javascript很快就会变得很有用.这需要一个插件,它看起来像这样:
Javascript:
第1部分:
PhoneGap.exec("PixFileDownload.getSystemLanguage");
Run Code Online (Sandbox Code Playgroud)
第2部分(回调函数):
setLanguage(returnedLanguage)
{
GlobalVar.CurrentLanguage = returnedLanguage; //GloablVar.CurrentLanguage already defined
}
Run Code Online (Sandbox Code Playgroud)
目标C:
-(void)getSystemLanguage:(NSMutableArray*)paramArray withDict:(NSMutableDictionary*)options
{
/*Plugin Details
PhoneGap.exec("PixFileDownload.getSystemLanguage");
Returns Language Code
*/
NSUserDefaults* defs = [NSUserDefaults standardUserDefaults];
NSArray* languages = [defs objectForKey:@"AppleLanguages"];
NSString *language = [languages objectAtIndex:0];
NSLog(@"####### This is the language code%@",language);
NSString *jsCallBack;
jsCallBack = [NSString stringWithFormat:@"setLanguage('%@');",language];
[self.webView stringByEvaluatingJavaScriptFromString:jsCallBack];
}
Run Code Online (Sandbox Code Playgroud)
编辑2:字符编码 将其他语言字符添加到sencha项目(或任何webview phonegap项目)时,请确保在索引文件中指定了正确的编码.这是我需要的标签.
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
Run Code Online (Sandbox Code Playgroud) 关于NSPredicate的简单问题.我正在尝试用"传入"值构造我的谓词,如下所示:
NSPredicate* currentPredicate = [NSPredicate predicateWithFormat:@"%@ == %@",key,[changesDict valueForKey:@"Id"] ];
Run Code Online (Sandbox Code Playgroud)
但是,我无法使其正常工作.如果我插入实际值,我通过它确实工作.这样可行:
NSPredicate* currentPredicate = [NSPredicate predicateWithFormat:@"contactId == %@",[changesDict valueForKey:@"Id"] ];
Run Code Online (Sandbox Code Playgroud)
(注意我插入了contactId,而不是前一个用同名传递字符串的例子)
要解决我的NSLogged两个谓词看他们的描述,他们是不同的.我会在下面给他们看.
这是工作的
2013-01-17 10:29:25.513 TestingCoreData[1776:3b03] contactId == "5878"
Run Code Online (Sandbox Code Playgroud)
这是非工作的
2013-01-17 10:29:25.513 TestingCoreData[1776:3b03] "contactId" == "5878"
Run Code Online (Sandbox Code Playgroud)
所以我可以看到它插入一个字符串,我真的只想要我稍后将在获取请求中使用的属性的名称.但有没有办法通过传递价值来实现这一目标?
ios ×3
core-data ×2
cordova ×1
json ×1
localization ×1
nsoperation ×1
nspredicate ×1
objective-c ×1
sencha-touch ×1
uistoryboard ×1