今天,我的构建突然开始花了很长时间在我的iPad上安装和启动(使用XCode 7).在"执行安装操作"阶段,它会挂起大约一分钟,然后当启动屏幕显示在设备上时,应用程序启动大约需要一分钟.应用程序启动后,它正常运行,没有任何问题.
我重新启动了Xcode,清理了应用程序,删除了构建文件夹,删除了DerivedData,重新启动了OSX,重启了iOS,从iPad上删除了应用程序,甚至将iPad上的iOS升级到9.0.2.
编辑:这个问题最初似乎是我使用的iPad Mini 3特有的; 它没有发生在我正在测试的iPhone上.现在,在周末之后,它正在我正在开发的iOS 8.4 iPhone 5上发生.
编辑2:这种情况昨天偶尔发生,现在我的所有设备上似乎已经清理干净了.但是,如果它发生的话,仍然不知道采取什么措施来解决这个问题.
编辑3:它继续发生,但更少见.
我正在我的项目上设置单元测试,以确保所有UIViewController IBOutlets都连接到它们各自的Xib对象(即,在viewDidLoad之后不为零)。我正在考虑将协议与这些UIViewControllers一起使用所需的函数“ getAllOutletNames”,像这样:
-(NSArray*)getAllOutletNames
{
return @[ @"outletproperty1", @"outletProperty2", ...];
}
Run Code Online (Sandbox Code Playgroud)
...然后使用[viewController valueForKey:outletName]确保所有这些都不为零。问题在于它有点笨拙。必须为添加到xib的每个插座更新“ getAllOutletNames”,这很容易被忽略。我希望以编程方式进行此操作,以便可以自动检测并迭代所有IBOutlet属性。
我在NSHipster的这篇文章(“属性支持的属性”的cmd + f)中读到了一个属性应用于IBOutlets(或者我不太理解的“属性支持的属性”)。
看来我可以使用此答案的一部分获取类中所有属性的列表,而我可以使用此答案的一部分获取其属性。但是,使用以下代码从IBOutlet属性与非IBOutlet属性输出属性,我没有发现任何区别:
const char * type = property_getAttributes(class_getProperty([self class], [outletName UTF8String]));
NSString * typeString = [NSString stringWithUTF8String:type];
NSArray * attributes = [typeString componentsSeparatedByString:@","];
NSLog(@"%@",attributes);
Run Code Online (Sandbox Code Playgroud)
IB插座
(
"T@\"UILabel\"",
"&",
N,
"V_titleLabel"
)
Run Code Online (Sandbox Code Playgroud)
非IB插座
(
"T@\"UIView\"",
"&",
N,
"V_programmaticallySetupView"
)
Run Code Online (Sandbox Code Playgroud)
是否有任何方法可以访问NSHipster文章中提到的“属性支持的属性”,或者以其他方式确定某个属性是否以编程方式是IBOutlet,还是我在这里吠叫了错误的树?
我正在创建一系列帮助页面,这些页面会在用户首次启动应用程序时显示.为此,我有一个以编程方式设置UIViewController,初始化(编程设置)UICollectionView视图控制器边界的大小.每个单元格包含一个全屏大小的图像.
当已经存在现有视图控制器时按下此视图控制器时,它显示正常.但是,当此视图控制器用作app导航控制器的初始根视图控制器时,集合视图具有正确的大小和对齐方式,但单元格从屏幕顶部向下移动约10个像素,因此集合查看背景显示通过.
(注意红色是集合视图背景颜色)
如果我在viewDidLoad,viewDidLayoutSubviews或viewWillAppear中设置集合视图,我会遇到同样的问题.如果我在viewDidAppear中设置集合视图,则不会遇到此问题,但这不起作用,因为用户在加载集合视图之前会看到黑屏.
以下是在应用程序中显示视图控制器的代码:didFinishLaunchingWithOptions:launchOptions:
UIViewController* viewControllerToPush = [[OnboardingViewController alloc] initWithNibName:nil bundle:nil];
_nav = [[UINavigationController alloc] initWithRootViewController:viewControllerToPush];
[_nav setNavigationBarHidden:YES];
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
[self.window setRootViewController:_nav];
[self.window makeKeyAndVisible];
Run Code Online (Sandbox Code Playgroud)
以下是设置集合视图和布局的代码:
UICollectionViewFlowLayout* layout = [[UICollectionViewFlowLayout alloc] init];
layout.minimumInteritemSpacing = 0;
layout.minimumLineSpacing = 0;
layout.itemSize = CGSizeMake(self.view.bounds.size.width, self.view.bounds.size.height);
layout.scrollDirection = UICollectionViewScrollDirectionHorizontal;
CGRect collectionViewFrame = self.view.bounds;
_collectionView = [[UICollectionView alloc] initWithFrame:collectionViewFrame collectionViewLayout:layout];
_collectionView.delegate = self;
_collectionView.dataSource = self;
_collectionView.pagingEnabled = YES;
_collectionView.showsHorizontalScrollIndicator = NO;
[_collectionView registerClass:[OnboardingCollectionViewCell class] forCellWithReuseIdentifier:@"Cell"];
[self.view addSubview:_collectionView];
Run Code Online (Sandbox Code Playgroud) uinavigationcontroller ios uicollectionview uicollectionviewcell uicollectionviewlayout
我对ios很新.我正在开发一个项目,它经常在整个应用程序中使用某个UIView类.这个类只是一个用背景颜色做一些透明度的图像.这到目前为止工作正常.这个类有时作为单独的UIView存在,有时作为按钮子视图存在.
当我将这个UIVut添加到UIButton作为子视图时,UIView的全部内容以完整大小显示,但按钮的可点击区域保持xib中定义的大小,除非关闭Use Autolayout(即使我手动尝试)设置按钮的框架.)
我想在xib上放置一个UIButton作为占位符,然后根据初始化的UIView的叠加图像的大小定义其大小/可点击区域.
这应该是可能的,还是我误解了xib文件/ autolayout的用法?
在ViewDidLoad下我有......
- (void)viewDidLoad{
[theButton addSubview:_theView];
CGRect buttonFrame = theButton.frame;
buttonFrame.size = CGSizeMake(_theView.getSize.width,_theView.getSize.height);
[theButton setFrame:buttonFrame];
}
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试调用setFrame之前和之后打印按钮信息时,框架保持相同的大小.
(注意'_theView.getSize'是我添加的)
ios ×3
autolayout ×1
build ×1
ipad ×1
objective-c ×1
properties ×1
uibutton ×1
uiview ×1
unit-testing ×1
xcode ×1
xib ×1