我有一个设置有工作登录和主视图控制器的故事板,后者是用户在登录成功时导航到的视图控制器.我的目标是在验证(存储在钥匙串中)成功时立即显示主视图控制器,如果验证失败则显示登录视图控制器.基本上,我想在AppDelegate中执行此操作:
// url request & response work fine, assume success is a BOOL here
// that indicates whether login was successful or not
if (success) {
// 'push' main view controller
} else {
// 'push' login view controller
}
Run Code Online (Sandbox Code Playgroud)
我知道方法performSegueWithIdentifier:但是这个方法是UIViewController的实例方法,所以不能从AppDelegate中调用.如何使用我现有的故事板来做到这一点?
编辑:
故事板的初始视图控制器现在是一个没有连接任何东西的导航控制器.我使用setRootViewController:区别因为MainIdentifier是一个UITabBarController.那么这就是我的线条:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
BOOL isLoggedIn = ...; // got from server response
NSString *segueId = isLoggedIn ? @"MainIdentifier" : @"LoginIdentifier";
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Storyboard" bundle:nil];
UIViewController *initViewController = [storyboard instantiateViewControllerWithIdentifier:segueId];
if (isLoggedIn) { …Run Code Online (Sandbox Code Playgroud) ARC让我很难跟随演员:
NSDictionary *attributes;
SecItemCopyMatching((__bridge CFDictionaryRef)keychainItemQuery, (CFTypeRef *)&attributes);
Run Code Online (Sandbox Code Playgroud)
错误:ARC不允许使用指向'CFTypeRef '(又名'const void* ')的Objective-C指针的间接指针
在我的应用程序中,我有一个登录屏幕.但是,当您将登录按钮中的segue连接到下一个(表格)视图控制器时,无论您输入什么作为登录信息,您始终都可以继续.如何检查登录信息然后决定是否执行segue,那么如何有条件地执行segue?
在使用segue时是否可以实现这一目标?我知道它可以通过编程方式完成,但后来我需要另一个导航控制器,因为我需要一个导航栏..
我无法使这个持久性文件正确...我在本书中没有找到任何我用作指南的信息.我正在使用MySQL数据库.
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="a11_DA_g5_PU" transaction-type="JTA">
<jta-data-source>a11_DA_g5</jta-data-source>
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<class>entities.Book</class>
<class>entities.Author</class>
<class>entities.Customer</class>
<class>entities.Membership</class>
<properties>
<property name="eclipselink.target-database" value="DERBY"/>
<property name="javax.persistence.jdbc.driver" value="org.apache.derby.jdbc.ClientDriver"/>
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://studev.groept.be:3306/a11_DA_g5"/>
<property name="javax.persistence.jdbc.user" value="a11_DA_g5"/>
<property name="javax.persistence.jdbc.password" value="passwordhere"/>
<property name="eclipselink.ddl-generation" value="create-tables"/>
</properties>
</persistence-unit>
</persistence>
Run Code Online (Sandbox Code Playgroud)
编辑
严重:DPL8015:存档[EJBModule_jar]中的部署描述符文件META-INF/persistence.xml中的无效部署描述符.第6行第15列 - cvc-complex-type.2.4.a:从元素'provider'开始发现无效内容.其中一个'{"http://java.sun.com/xml/ns/persistence":shared-cache-mode,,http://java.sun.com/xml/ns/persistence":validation-mode,预计"http://java.sun.com/xml/ns/persistence":properties}".
严重:DPL8005:部署描述符解析失败:cvc-complex-type.2.4.a:从元素'provider'开始发现无效内容.其中一个'{"http://java.sun.com/xml/ns/persistence":shared-cache-mode,,http://java.sun.com/xml/ns/persistence":validation-mode,预计"http://java.sun.com/xml/ns/persistence":properties}".
严重:部署应用程序时的异常[VaadinTestApp]
SEVERE:org.xml.sax.SAXParseException:cvc-complex-type.2.4.a:从元素'provider'开始发现无效内容.其中一个'{"http://java.sun.com/xml/ns/persistence":shared-cache-mode,,http://java.sun.com/xml/ns/persistence":validation-mode,预计"http://java.sun.com/xml/ns/persistence":properties}".java.io.IOException:org.xml.sax.SAXParseException:cvc-complex-type.2.4.a:从元素'provider'开始发现无效内容.其中一个'{"http://java.sun.com/xml/ns/persistence":shared-cache-mode,,http://java.sun.com/xml/ns/persistence":validation-mode,预计"http://java.sun.com/xml/ns/persistence":properties}".
目标是获取当前的NSManagedObjectContext以使用Core Data.在iOS 4.3中,我将UINavigationController的委托设置为AppDelegate,如此(在AppDelegate.m中):
self.navigationController.delegate = self;
Run Code Online (Sandbox Code Playgroud)
我可以做这样的事情(无论我需要上下文):
NSManagedObjectContext *context = [self.navigationController.delegate performSelector:@selector(managedObjectContext)];
Run Code Online (Sandbox Code Playgroud)
现在,在iOS 5中,我使用的是Storyboard,我很难搞清楚如何实现这一目标.我首先使用了一个代理,因为我不认为你想要一直传递你的AppDelegate.h.
目标是创建一个只能向前导航的UIPageViewController.我正在使用数据源为UIPageViewController提供内容.方向设置为UIPageViewControllerNavigationDirectionForward,过渡样式为UIPageViewControllerTransitionStyleScroll.
实施
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController
{
// returns the next view controller
}
Run Code Online (Sandbox Code Playgroud)
返回下一个视图控制器,而以下应确保无法向后导航
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController
{
return nil;
}
Run Code Online (Sandbox Code Playgroud)
返回nil应表明无法导航(如文档中所述).但是,我总是可以向后滚动一页.假设我有10页,我可以向前滚动所有页面,但在任何页面我都可以向后滚动1页.(例如:在第5页,我可以返回第4页,第8页,我可以返回第7页,依此类推.)
我知道我可以通过不使用数据源并使用setViewControllers:direction:animated:completion:方法来避免这种情况,但我想了解为什么我的尝试失败了.
在iOS6中,此方法返回每个iCloud帐户唯一的ID:
[[NSFileManager defaultManager] ubiquityIdentityToken]
Run Code Online (Sandbox Code Playgroud)
在iOS5中,检查iCloud是否可用的唯一方法是使用:
[[NSFileManager defaultManager] URLForUbiquityContainerIdentifier:nil]
Run Code Online (Sandbox Code Playgroud)
这将用于检查iOS5中的iCloud可用性,但如何区分iOS5中的用户(iCloud帐户)?
我正在iCloud中同步Core Data,但我也希望能够在没有iCloud帐户的情况下使用该应用程序.因此我不能使用.nosync文件夹,所以我需要自己管理对商店的访问(确保每个iCloud帐户只能访问自己的文件).为此,我将来自同一iCloud帐户的所有Core Data存储放在其自己的文件夹中,使用ubiquityIdentityToken生成文件夹的名称,因为这对于每个iCloud帐户都是唯一的.
是否有其他方法可以根据iCloud帐户获取一些UUID?据我调查,我可以使用URLForUbiquityContainerIdentifier中没有任何独特之处.或者除了使用特定于文件夹的访问之外,还有其他方法可以管理访问吗?
现有解决方案
在问我的问题之前,我已经广泛搜索了 SO 和 Github。现有主题都没有为我们的设置提供任何可行的解决方案。
配置
我们在远程 macOS 机器上配置了 Jenkins + Fastlane。Fastlane 匹配应该通过 SSH 从专用存储库获取签名凭据(证书 + 配置文件)。
问题
SSH 连接失败(挂起)。詹金斯控制台输出:
INFO [2019-04-09 14:09:29.05]: Cloning remote git repo...
INFO [2019-04-09 14:09:29.05]: If cloning the repo takes too long, you can use the `clone_branch_directly` option in match.
INFO [2019-04-09 14:09:29.05]: [36m$ git clone ssh://git@xxx.xx.x.xxx:xxxx/cert/ios-certificates-profiles.git /var/folders/_redacted_[0m
INFO [2019-04-09 14:09:29.07]: ? [35mCloning into '/var/folders/_redacted_'...[0m
INFO [2019-04-09 14:09:29.19]: ? [35mThe authenticity of host '[xxx.xx.x.xxx:xxxx]:xxxx ([xxx.xx.x.xxx:xxxx]:xxxx)' can't be established.[0m
INFO [2019-04-09 14:09:29.19]: ? [35mRSA key fingerprint …Run Code Online (Sandbox Code Playgroud) $directory = $_SESSION['base_url'] . "assets/images/*.jpg";
$images = glob($directory);
Run Code Online (Sandbox Code Playgroud)
此代码无效.如果我打印$目录,它匹配我放置一些.jpg文件的目录.$ images只是空着......
正如bsdnoobz回答的那样,这是我的解决方案:
$directory = dirname(dirname(dirname(__FILE__))) . "\assets\images\\"; //escape
$images = glob($directory . "*.jpg");
Run Code Online (Sandbox Code Playgroud) 我正在创建一个切换开关.我有一个包含CCLayer的CCScene,其中包含一个ToggleNode.ToggleNode正确显示我输入的精灵和标签.触摸处理不起作用,因为ToggleNode的边界框似乎保持为零.我在CCLayer(它的作用是ccTouchBegan:withEvent:正在输入)中抓住了触摸,我有这个代码:
- (BOOL)ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event
{
CGPoint touchLocation = [self convertTouchToNodeSpace:touch];
NSLog(@"bounding box: %f, %f, %f, %f", toggleNode.boundingBox.origin.x, toggleNode.boundingBox.origin.y, toggleNode.boundingBox.origin.x + toggleNode.boundingBox.size.width, toggleNode.boundingBox.origin.y + toggleNode.boundingBox.size.height);
NSLog(@"touch: %f, %f", touchLocation.x, touchLocation.y);
if (CGRectContainsPoint(toggleNode.boundingBox, touchLocation)) {
[toggleNode toggle];
}
return NO;
}
Run Code Online (Sandbox Code Playgroud)
触摸ToggleNode会导致:
bounding box: 512.000000, 384.000000, 512.000000, 384.000000
touch: 508.000000, 378.000000
Run Code Online (Sandbox Code Playgroud)
这让我相信边界框保持为零.但为什么?保留问题?我还在学习cocos2d,但我不认为这是正常行为.
ios ×4
objective-c ×4
storyboard ×3
ios6 ×2
bounding-box ×1
cocoa-touch ×1
core-data ×1
datasource ×1
delegates ×1
ejb ×1
fastlane ×1
git ×1
glob ×1
icloud ×1
ios5 ×1
java ×1
jdbc ×1
jenkins ×1
jta ×1
match ×1
persistence ×1
php ×1
segue ×1
ssh ×1