CarbonCore/OSUtils.h自OS X 10.8 Mountain Lion 起,位于的Gestalt()函数已被弃用.
我经常使用此函数在运行时测试OS X操作系统的版本(参见下面的玩具示例).
在Cocoa应用程序中,可以使用哪些其他API在运行时检查OS X操作系统版本?
int main() {
SInt32 versMaj, versMin, versBugFix;
Gestalt(gestaltSystemVersionMajor, &versMaj);
Gestalt(gestaltSystemVersionMinor, &versMin);
Gestalt(gestaltSystemVersionBugFix, &versBugFix);
printf("OS X Version: %d.%d.%d\n", versMaj, versMin, versBugFix);
}
Run Code Online (Sandbox Code Playgroud) 该ConsoleLoggerProvider有四个构造函数:
ConsoleLoggerProvider(IConsoleLoggerSettings)ConsoleLoggerProvider(IOptionsMonitor<ConsoleLoggerOptions>)ConsoleLoggerProvider(Func<String,LogLevel,Boolean>, Boolean)ConsoleLoggerProvider(Func<String,LogLevel,Boolean>, Boolean, Boolean)其中三个被宣布为过时的消息:
此方法已过时,将在以后的版本中删除.建议的替代方法是使用LoggerFactory配置筛选,使用ConsoleLoggerOptions配置日志记录选项.
使用构造函数#3,LoggerFactory使用a 创建一个ConsoleLoggerProvider很简单(如实体框架核心中记录的 - 日志记录):
var loggerFactory = new LoggerFactory(new[] { new ConsoleLoggerProvider((category, level) => level >= LogLevel.Information, true) });
Run Code Online (Sandbox Code Playgroud)
但由于它已被弃用,我们留下了构造函数#2.这是我发现的等价物:
var configureNamedOptions = new ConfigureNamedOptions<ConsoleLoggerOptions>("", null);
var optionsFactory = new OptionsFactory<ConsoleLoggerOptions>(new []{ configureNamedOptions }, Enumerable.Empty<IPostConfigureOptions<ConsoleLoggerOptions>>());
var optionsMonitor = new OptionsMonitor<ConsoleLoggerOptions>(optionsFactory, Enumerable.Empty<IOptionsChangeTokenSource<ConsoleLoggerOptions>>(), new OptionsCache<ConsoleLoggerOptions>());
var loggerFactory = new LoggerFactory(new[] { new ConsoleLoggerProvider(optionsMonitor) }, new LoggerFilterOptions { MinLevel = LogLevel.Information });
Run Code Online (Sandbox Code Playgroud)
这看起来过于复杂,我错过了一些简单的东西吗?
我正在开发一个应用程序,我正在使用一个开源组件.
我有一个包含MyApp.xcodeproj和Component.xcodeproj的工作区.我的应用程序有三个配置:Debug,App Store和In House,但该组件只有两个:Debug和Release
在Debug配置中,一切正常,但我无法在App Store或In House配置中编译我的应用程序,因为配置名称不匹配.尝试时,我收到文件未找到错误#import <Component/Component.h>
我需要App Store和In House配置,我真的想避免修改组件的配置,以便于将来更新组件.
我知道我可以使用CocoaPods来解决这个问题,但我想知道Xcode中是否有一个简单的解决方案
我正在尝试使用UIImagePickerController获取从库中拾取的视频的缩略图.
这是我的代码.如果我使用相机录制视频,我可以获得视频的缩略图.但是如果我从图书馆中获取视频,我就无法获得缩略图.谁知道为什么?
-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
NSString *mediaType = [info objectForKey:UIImagePickerControllerMediaType];
if ([mediaType isEqualToString:(NSString *)kUTTypeMovie])
{
NSURL *mediaUrl = [info objectForKey:UIImagePickerControllerMediaURL];
MPMoviePlayerController *moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:mediaUrl];
moviePlayer.shouldAutoplay = NO;
UIImage *thumbnail = [[moviePlayer thumbnailImageAtTime:0.0 timeOption:MPMovieTimeOptionNearestKeyFrame] retain];
[imageView setImage:thumbnail]; //imageView is a UIImageView
[moviePlayer release];
[thumbnail release];
[self dismissModalViewControllerAnimated:YES];
}
}
Run Code Online (Sandbox Code Playgroud) 我正在使用Xcode 6的新异步测试功能.当异步任务在超时之前结束时,一切正常.但是如果任务花费的时间比超时时间长,事情会变得更复杂.
以下是我正在进行的测试:
@interface AsyncTestCase : XCTestCase @end
@implementation AsyncTestCase
// The asynchronous task would obviously be more complex in a real world scenario.
- (void) startAsynchronousTaskWithDuration:(NSTimeInterval)duration completionHandler:(void (^)(id result, NSError *error))completionHandler
{
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(duration * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
completionHandler([NSObject new], nil);
});
}
- (void) test1TaskLongerThanTimeout
{
XCTestExpectation *expectation = [self expectationWithDescription:@"Test 1: task longer than timeout"];
[self startAsynchronousTaskWithDuration:4 completionHandler:^(id result, NSError *error) {
XCTAssertNotNil(result);
XCTAssertNil(error);
[expectation fulfill];
}];
[self waitForExpectationsWithTimeout:2 handler:nil];
}
- (void) test2TaskShorterThanTimeout
{
XCTestExpectation *expectation …Run Code Online (Sandbox Code Playgroud) 来自iOS人机界面指南,iOS UI元素使用指南
在iPhone上,考虑设备旋转时工具栏高度的自动更改.特别是,请确保您的自定义工具栏图标非常适合横向显示的细条.不要以编程方式指定工具栏的高度.
我可以看到Mail,Twitter for iPhone和Dropbox的高度从44点变为32点,但是当我添加工具栏(使用Interface Builder)并让我的UIViewController子类自动旋转(shouldAutorotateToInterfaceOrientation:返回YES)时,工具栏会不会在设备旋转时自动更改其高度.
该UIToolbar类参考并没有提到高度的这种自动变化,所以我应该改变它编程,即使HIG说不要指定编程工具栏的高度?
我想按照⌘+⇥时出现的相同顺序获取正在运行的应用程序列表
即如果我使用TextEdit,然后预览,那么iCal,顺序是
使用 [[NSWorkspace sharedWorkspace] launchedApplications]不起作用,因为应用程序按启动日期/进程ID排序.枚举GetNextProcess不起作用,因为它也是由pid排序的.
注册通知和维护列表不是一个选项,因为我必须在应用程序启动后立即知道列表.那么,列表的第一个元素实际上就足够了,但我认为这几乎是同一个问题.
是否有一些API可用于获取此信息?
在我的应用程序调用[AVURLAsset isPlayableExtendedMIMEType:@"video/mp4; codecs=\"avc1.64001F, mp4a.40.2\""]返回YES,这是预期的.
如果我在单元测试中运行完全相同的代码,则返回NO.
应用程序和单元测试都在运行iOS 7.0的iPhone Retina(4英寸)模拟器上使用Xcode 5.0.2运行.
- (void) testPlayableExtendedMIMEType
{
XCTAssertTrue([AVURLAsset class], @"");
XCTAssertTrue([AVURLAsset isPlayableExtendedMIMEType:@"video/mp4; codecs=\"avc1.64001F, mp4a.40.2\""], @"");
}
Run Code Online (Sandbox Code Playgroud)
第一个断言通过,但第二个断言失败.
为什么在单元测试和应用程序中这种行为会有所不同?
尝试将应用程序从.net 4.5移植到.net核心以供客户端使用.我注意到CreateType不再是TypeBuilder的一部分.我已经搜索了多个新的反射库而没有运气.有谁知道如何移植这个?
有问题的代码:
typeBuilder.CreateType()
Run Code Online (Sandbox Code Playgroud) 我一直在新的xcode4上工作这个iPhone应用程序.实际上每次我在模拟器中退出我的应用程序时,我在main.m中的代码行上出现错误这是我的代码行,然后是下一行的错误
int retVal = UIApplicationMain(argc,argv,nil,nil);
线程1:编程接收信号:"SIGTERM".
这里发生了什么?我该如何解决?
ios ×3
cocoa ×2
iphone ×2
.net-core ×1
avfoundation ×1
c# ×1
list ×1
macos ×1
macos-carbon ×1
process ×1
sigterm ×1
thumbnails ×1
uitoolbar ×1
unit-testing ×1
video ×1
xcode ×1
xcode4 ×1
xctest ×1