以下代码给出了警告Sending 'ViewController *const __strong' to parameter of incompatible type 'id<AVAudioPlayerDelegate>'(它是以下代码中的第三行):
NSURL *sound0URL = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"0" ofType:@"aiff"]];
audioPlayer0 = [[AVAudioPlayer alloc] initWithContentsOfURL:sound0URL error:nil];
[audioPlayer0 setDelegate: self]; // <--- this line causes the warning
[audioPlayer0 prepareToPlay];
audioPlayer0.currentTime = 0;
[audioPlayer0 play];
Run Code Online (Sandbox Code Playgroud)
怎么修好?我在这个ViewController实例方法中有这个代码viewDidLoad.还有一个类似的问题但是这是一个类方法:从'Class'分配给'id <AVAudioPlayerDelegate>'的指针类型不兼容
这与LookAt目标位置无关,如果它是z = 0或z = 1000或-1000?
我试过了
gluLookAt(512, 384, 2000,
512, 384, 0,
0.0f, 1.0f, 0.0f);
Run Code Online (Sandbox Code Playgroud)
并且工作正常,现在我将第3行(UP向量),最后一个数字更改为0.8:
gluLookAt(512, 384, 2000,
512, 384, 0,
0.0f, 1.0f, 0.8f);
Run Code Online (Sandbox Code Playgroud)
它完全相同...接下来我尝试并修改了第3行,第一个数字为0.8:
gluLookAt(512, 384, 2000,
512, 384, 0,
0.8f, 1.0f, 0.8f);
Run Code Online (Sandbox Code Playgroud)
现在视图就像向左旋转了45度.这个UP向量如何工作?
由于Xcode中OS X应用程序的模板似乎与空的app模板类似,因此以下内容用于添加视图和按钮(现在尝试不使用"界面"构建器):
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
NSView *view = [[NSView alloc] initWithFrame:NSMakeRect(100, 100, 100, 100)];
view.layer.backgroundColor = [[NSColor yellowColor] CGColor];
[self.window.contentView addSubview:view];
NSRect frame = NSMakeRect(10, 40, 90, 40);
NSButton* pushButton = [[NSButton alloc] initWithFrame: frame];
pushButton.bezelStyle = NSRoundedBezelStyle;
[self.window.contentView addSubview:pushButton];
NSLog(@"subviews are %@", [self.window.contentView subviews]);
}
Run Code Online (Sandbox Code Playgroud)
iOS上的类似代码应该生成一个黄色框和一个按钮,但上面的代码只生成一个按钮,但视图不会显示.上面的代码有什么问题,以及如何让它以黄色背景显示视图?
在一本书中,说如下:
那么你怎么知道对象何时拥有,以及由谁拥有?请考虑以下示例:
Run Code Online (Sandbox Code Playgroud)NSString *str = [[NSString alloc] initWithString:@”Hello”]; NSString *str2 = str;在此示例中,您使用
alloc关键字forstr,因此您拥有str.因此,您需要在不再需要时释放它.但是,str2只是指向str,所以你不拥有str2,这意味着str2当你完成使用它时你不需要释放.
我认为所有权是按对象而不是变量或指针...所以我们不能说我们"拥有str"或"拥有str2"......我们拥有一个对象,它由任何一个str或者指向str2,如果我们使用[str release]或者[str2 release],它完全一样.
另一种描述是:
例如,考虑上一节中使用的示例:
Run Code Online (Sandbox Code Playgroud)NSString *str = [[NSString alloc] initWithString:@”Hello”]; NSString *str2 = str; [str release]; [str2 release]; //---this is not OK as you do not own str2---尝试发布
str2将导致运行时错误,因为您无法释放不属于您的对象.
[str2 release]如果以前调用过,我们实际上可以使用 [str release].如果我们这样做,那么该行[str release]会导致错误,因为现在 …
尝试打印出N个空格(或示例中的12个):
NSLog(@"hello%@world", [NSString stringWithCharacters:" " length:12]);
const unichar arrayChars[] = {' '};
NSLog(@"hello%@world", [NSString stringWithCharacters:arrayChars length:12]);
const unichar oneChar = ' ';
NSLog(@"hello%@world", [NSString stringWithCharacters:&oneChar length:12]);
Run Code Online (Sandbox Code Playgroud)
但他们都打印出奇怪的东西,比如hello ÔÅÓñüÔÅ®Óñü®ÓüÅ®ÓñüÔ®ÓüÔÅ®world...我认为"char数组"和"字符串"相同,而且与"指向字符的指针"相同?API规范说它是一个"Unicode字符的C数组"(通过Unicode,它是UTF8吗?如果是,那么它应该与ASCII兼容)...如何使它工作以及为什么这三种方式赢了干嘛?
我在Xcode上为OS X创建了一个空的Cocoa应用程序,并添加了:
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
self.view = [[NSView alloc] initWithFrame:NSMakeRect(100, 100, 200, 200)];
self.view.wantsLayer = YES;
self.view.layer = [CALayer layer];
self.view.layer.backgroundColor = [[NSColor yellowColor] CGColor];
self.view.layer.anchorPoint = CGPointMake(0.5, 0.5);
self.view.layer.transform = CATransform3DMakeRotation(30 * M_PI / 180, 1, 1, 1);
[self.window.contentView addSubview:self.view];
}
Run Code Online (Sandbox Code Playgroud)
但是旋转图层的背景被视图的边界区域剪切:

我想从OS X和iOS的某个版本开始,视图不会剪切其子视图的内容并显示内部和外部的所有内容?在iOS上,我确实看到了这种行为,但我想知道它为什么会出现这种情况以及如何让一切都显示出来?(我已经在Mountain Lion上使用了最新的Xcode 4.4.1).
(注意:如果你尝试上面的代码,你需要链接到Quartz Core,并且可能导入石英核心标题,虽然我想知道为什么我没有导入标题并且它仍然完美编译)
我想用ViewControlleriOS"单一视图应用程序"模板启动一个Cocoa应用程序,但是没有这样的模板(是否有可以使用的公共/开源软件?)
对于Cocoa应用程序来说,我们真的不需要一个,因为一个人NSView可以做所有事情吗?我们可以将所有事件处理放在我们的自定义NSView类中.难道iOS需要更多,因为旋转由ViewController处理并且通常需要旋转吗?但是如果我们使用MVC,那么总是使用ViewController可能会更好,如果有的话,是否有标准的方法,模板来做呢?
在本文中,它说ActionScript 3.0符合ECMA第4版.但是,ActionScript 3.0代码看起来像Java并且拥有class声明,甚至没有看起来像JavaScript和没有类或扩展,而不是看起来像JavaScript extend?
我正在使用Xcode 4.3.2并意识到项目文件没有添加到git repo中,所以我添加了它们并提交了:(有6个文件)
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# new file: Proj01.xcodeproj/project.xcworkspace/contents.xcworkspacedata
# new file: Proj01.xcodeproj/project.xcworkspace/xcuserdata/jeremy.xcuserdatad/UserInterfaceState.xcuserstate
# new file: Proj01.xcodeproj/project.xcworkspace/xcuserdata/jeremy.xcuserdatad/WorkspaceSettings.xcsettings
# new file: Proj01.xcodeproj/xcuserdata/jeremy.xcuserdatad/xcdebugger/Breakpoints.xcbkptlist
# new file: Proj01.xcodeproj/xcuserdata/jeremy.xcuserdatad/xcschemes/FlipCard.xcscheme
# new file: Proj01.xcodeproj/xcuserdata/jeremy.xcuserdatad/xcschemes/xcschememanagement.plist
Run Code Online (Sandbox Code Playgroud)
但实际上这是一个好习惯吗?(有一次Xcode崩溃,文件夹.xcodeproj消失了).
与其让drawRect重绘上千点的每一次,我觉得有几个办法"缓存屏幕上的影像"和任何其他图纸,我们将添加到图像,并只显示图像时,是时候drawRect:
使用BitmapContext并绘制到位图,然后drawRect绘制此位图.
使用CGLayer和绘制CGLayerin drawRect,这可能比方法1更快,因为此图像缓存在图形卡中(它不会计入iOS上"内存警告"的RAM使用情况?)
绘制到a CGImage,并使用视图的图层:view.layer.contents = (id) cgimage;
所以似乎有三种方法,我认为CALayer方法(3)只能使用a CGImage来实现它. CALayer本身不能缓存屏幕图像,不像CGLayer(2)中那样.
方法(2)在这三种方法中是最快的,还有其他方法可以实现这一目标吗?我实际上计划动画几个屏幕图像,(循环5或6个),并尝试使用CADisplayLink60fps的最高帧速率.方法(1),(2)或(3)中的任何一个是否会使用显卡中的内存,因此不使用RAM,因此也不太可能从iOS获得内存警告?