我有一个带有非常基本音频组件的应用程序:使用AVAudioPlayer播放的一组循环背景歌曲(歌曲文件名存储为数组).一切都运行良好数月,但iOS 10正在为我的大量用户(每天数千个)崩溃.
问题是,我无法弄清楚在iOS 10中发生了什么变化.每次用户锁定他们的设备时都会发生这种情况,特别是在音乐完成淡出的瞬间发生(它不会播放背景音频,所以离开该应用程序自动淡出音乐).
那一刻,我每次都得到这个:
2016-09-22 17:06:39.439979 TerraGenesis[8533:2459778] [aurioc] 889: failed: '!pla' (enable 2, outf< 2 ch, 0 Hz, Float32, non-inter> inf< 2 ch, 0 Hz, Float32, non-inter>)
2016-09-22 17:06:39.443348 TerraGenesis[8533:2459778] [aurioc] 889: failed: '!pla' (enable 2, outf< 2 ch, 44100 Hz, Float32, non-inter> inf< 2 ch, 0 Hz, Float32, non-inter>)
2016-09-22 17:06:39.445339 TerraGenesis[8533:2459778] [central] 54: ERROR: [0x1b50d6c40] >avae> AVAudioEngineGraph.mm:2515: PerformCommand: error 561015905
2016-09-22 17:06:39.446646 TerraGenesis[8533:2459778] *** Terminating app due to uncaught exception 'com.apple.coreaudio.avfaudio', reason: 'error 561015905'
*** First throw …Run Code Online (Sandbox Code Playgroud) 我有一个在iOS 6上完美运行的应用程序,但是在iOS 7上,如果用户采取了非常具体的操作(太复杂而无法进入,但它使用的UIWebView是一致的),应用程序崩溃了错误:
*** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[WebCoreSharedBufferData getBytes:range:]: range {0, 8} exceeds data length 0'
Run Code Online (Sandbox Code Playgroud)
现在我非常乐意自己做一些研究和实验,但我找不到WebCoreSharedBufferData.谷歌搜索显示有几个人(比如这里,这里,这里和这里)有类似的问题,但他们的问题要么没有得到回答,要么他们正在使用他们的应用程序(如缩放地图或使用第三方代码) )我不是在做.
Xcode文档从未听说过WebCoreSharedBufferData,对我的项目的搜索显示没有引用它.谷歌的搜索也让我没有开心,大多数只是问题和GitHub项目与我没有使用的第三方代码.我认为这是苹果公司UIWebView功能的深层原因,但由于无法了解更多信息,我很难继续进行.
所以我的问题是:有谁知道我在哪里可以找到信息/教程/描述等WebCoreSharedBufferData?我觉得如果我理解得更好,我就能找到解决方案,在黑暗中调试很难......
或者,有没有人只是直接知道WebCoreSharedBufferDataiOS 7中可能会产生这样的错误的变化?
编辑: kcbanner(他遇到过类似问题)提供的线索在下面的评论中:我们的两个问题都涉及有画布的页面和onclick带有这些画布的事件.也许iOS 7中的画布点击处理有些变化了吗?
我正试图在我的应用程序中通过iPhone上的上扬声器播放音频,这是您在通话期间按下的那个.我知道这是可能的,因为我已经从App Store玩了一个游戏(通过"点击水龙头"的"The Heist")来模拟电话,并且正是如此.
我已经在网上做了很多研究,但我很难找到一个甚至讨论过这种可能性的人.绝大多数帖子似乎都是关于免提扬声器和插入式耳机(就像这个和这个和这个),而不是上部"电话"扬声器和免提扬声器.(部分问题可能没有一个好名字:"手机扬声器"通常意味着设备底部的免提扬声器等,所以很难做一个非常有针对性的搜索).我已经看过Apple了Audio Session Category Route Overrides,但是那些似乎(纠正我,如果我错了)只处理底部的免提扬声器,而不是手机顶部的扬声器.
我找到了一个似乎与此有关的帖子:链接.它甚至提供了一堆代码,所以我认为我在家是免费的,但现在我似乎无法让代码工作.为简单起见,我只是将DisableSpeakerPhone方法(如果我理解正确应该将音频重新路由到上层扬声器)复制到我的方法中viewDidLoad,看看它是否可行,但第一个"断言"行失败,音频继续发挥出底线.(我也按照评论中的建议导入了AudioToolbox框架,因此这不是问题.)
这是我正在使用的主要代码块(这是我复制到我viewDidLoad的测试中),尽管在我链接到的文章中还有一些方法:
void DisableSpeakerPhone () {
UInt32 dataSize = sizeof(CFStringRef);
CFStringRef currentRoute = NULL;
OSStatus result = noErr;
AudioSessionGetProperty(kAudioSessionProperty_AudioRoute, &dataSize, ¤tRoute);
// Set the category to use the speakers and microphone.
UInt32 sessionCategory = kAudioSessionCategory_PlayAndRecord;
result = AudioSessionSetProperty (
kAudioSessionProperty_AudioCategory,
sizeof (sessionCategory),
&sessionCategory
);
assert(result == kAudioSessionNoError);
Float64 sampleRate = 44100.0;
dataSize = sizeof(sampleRate);
result = …Run Code Online (Sandbox Code Playgroud) 我已经在这个应用程序上工作了几个星期,一切都很棒.我一直在建造和存档并拥有一个球.所有证书和配置文件以及ID(看似)都已按顺序运行并且运行良好.
然后几天前,似乎没有任何我能看出的变化,Xcode说我没有任何"配置文件具有有效的签名身份",当我告诉它"修复问题"时,我每次都会收到此错误:
An invalid value 'Xcode: Wildcard AppID' was provided for the parameter 'appIdName'.
Run Code Online (Sandbox Code Playgroud)
我发现了一些看起来很相似的问题,但我没有找到任何关于这个错误的具体内容.Google,SO,没什么.我在开发人员门户网站上有一个名为"Xcode:Wildcard AppID"的AppID,ID为*,我尝试制作另一个(如其他问题所示),但它没有帮助.
任何人都可以解释这个错误意味着什么,以及我如何解决它?对于奖励积分,是什么导致它,所以我可以在将来避免这种情况?
我在SceneKit中应用于球体的纹理中出现了间歇性的接缝外观.它始终位于球体的"后面",纹理的两个边缘相遇.看起来纹理与自身并不完全连接,您可以通过细线看到背景.问题似乎存在于所有设备和所有最近的iOS版本中.我的实验表明,纹理的分辨率似乎是一个因素,但我还没有确切地确定了这种影响.
为了清晰起见,我附上了一个截图来说明白色背景,但是接缝本身并不是白色,它只是让背景显示出来:
有谁知道为什么SceneKit会以这种方式渲染纹理?我有一个相当简单的实现,只是创建一个球体和一个材料,并应用漫反射和法线贴图.这是我的代码:
// create planet
SCNNode *baseNode = [SCNNode node];
[baseNode setName:name];
// Planet
SCNSphere *planet = [SCNSphere sphereWithRadius:5];
SCNNode *planetNode = [SCNNode nodeWithGeometry:planet];
[planetNode setName:@"planetNode"];
[baseNode addChildNode:planetNode];
SCNMaterial *material = [SCNMaterial material];
material.shininess = 1;
material.normal.intensity = 0.5;
material.normal.contents = normalMap;
material.diffuse.contents = diffuseMap;
planetNode.geometry.materials = @[material];
Run Code Online (Sandbox Code Playgroud)
有没有人有任何可能导致这种"缝"出现的经验,以及我如何摆脱它?我的纹理通常是1000x500或2048x1024,具体取决于具体情况,并且两种分辨率都出现了接缝.是否有一个理想的SceneKit纹理分辨率,或众所周知的可能导致此行为的东西?
我正在使用 制作一个大网格UICollectionView,我希望它可以UICollectionView使用标准的捏缩放手势进行缩放(整个,而不仅仅是单个单元格)。有问题的网格有一个 custom UICollectionViewLayout,因为我需要它来水平和垂直滚动。
我的布局与这个 SO answer完美配合,所以我有一个可以四处移动的网格。简短的版本是每行单元格是section视图的一个,并且所有单元格都基于cellSize(开始时)50的统一定位。
然后我使用这个 SO answer的修改版本计算了捏缩放能力,我基本上在cellSize收到捏手势时更改布局的值,然后使布局无效,以便它重新绘制略大或小布局。因此,所有的单元格都会变大或变小,我们就可以缩放了。
这是捏合手势方法的代码:
-(void)didReceivePinchGesture:(UIPinchGestureRecognizer*)gesture {
double newCellSize = [(IMMapViewLayout *)_mainCollectionView.collectionViewLayout cellSize] * gesture.scale;
newCellSize = MIN(newCellSize, 100);
newCellSize = MAX(newCellSize, 15);
[(IMMapViewLayout *)_mainCollectionView.collectionViewLayout setCellSize:newCellSize];
[_mainCollectionView.collectionViewLayout invalidateLayout];
}
Run Code Online (Sandbox Code Playgroud)
一切都(几乎)完美地工作。
我的问题是:它从左上角放大,而不是从夹点所在的位置放大。我想是有道理的,因为我们正在重新绘制所有内容,而且都变大了一点,但这显然不是预期的效果。
我的第一个想法是简单地检测正下方的单元格,然后使用它scrollToItemAtIndexPath:atScrollPosition:animated:立即移回该单元格,但它似乎不起作用,而且动画无论如何都会变得非常断断续续。此外,如果您捏住屏幕中央以外的任何地方,则在缩放过程中很难将其直接移回该确切位置。
这是我现在所拥有的:
-(void)didReceivePinchGesture:(UIPinchGestureRecognizer*)gesture {
double newCellSize = [(IMMapViewLayout *)_mainCollectionView.collectionViewLayout cellSize] * gesture.scale;
newCellSize = MIN(newCellSize, 100);
newCellSize = MAX(newCellSize, 15);
[(IMMapViewLayout *)_mainCollectionView.collectionViewLayout setCellSize:newCellSize];
[_mainCollectionView.collectionViewLayout invalidateLayout]; …Run Code Online (Sandbox Code Playgroud) uigesturerecognizer ios pinchzoom uipinchgesturerecognizer uicollectionview
我正在筛选刚刚开始的新工作中预先存在的代码,我遇到的第一个错误是附加到子UITableView类的搜索栏,它在每次击键后都会关闭键盘。经过一番搜索后,我发现了这个问题,似乎我找到了答案:该应用程序用于reloadData在每次击键后刷新结果,并且重新加载正在调用resignFirstResponder and dismissing the keyboard. Frustrating, but explained and understood.
但后来我的老板指出,我们在应用程序的其他地方使用了几乎完全相同的代码,而且它运行得很好。怎么可能呢?我发现自己处于一个不寻常的位置,需要解释为什么某些东西确实有效,因为上面的链接表明在期间关闭键盘reloadData是“正常”行为。
下面是两个 ViewController 中的相关方法,每个 ViewController 都是同一自定义 的子类UITableView。(方法已被简化,但不同的行为仍然存在。)我的一部分认为它一定是埋藏在两个子类之间的差异中的东西,但是如果是reloadData问题所在并且它没有在任何地方被重写,则不会这意味着子类不相关?
查找视图:
- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText{
[self.tableView reloadData];
NSLog(@"Lookup Reloaded");
}
Run Code Online (Sandbox Code Playgroud)
搜索视图:
- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText{
[self.tableView reloadData];
NSLog(@"Search Reloaded");
}
Run Code Online (Sandbox Code Playgroud)
如您所见,它们是相同的。每次击键后都会成功调用两者,但前者会关闭键盘,而后者则不会。
这些视图控制器中的每一个都超过一千行长,因此我很难缩小可能导致不同行为的原因。了解 FirstResponders 和 TableView 重新加载的人可以帮助我了解在哪里查看吗?这似乎是一个相当简单的过程(按下一个键>调用该方法>它重新加载表格>在此过程中关闭键盘)没有太多空间来改变该行为,但显然有一种方法可以防止最后一步,因为搜索视图已经在这样做了。
知道我应该将搜索重点放在哪里以找出原因吗?
SO上已经有几个答案关于"imageNamed:"不起作用,但没有一个包含我特别的皱纹:
我是nil从iOS 7上的"imageNamed:" 获得的,但同样的版本适用于iOS 8.
显然,所有内容都可以正常连接,因为它可以在iOS 8上运行,但它可以在iOS 7上持续返回nil大范围(可能是24打)的图像.值得注意的是,我将资产移动到AssetCatalog开始的时间.iOS 7上的资产目录是否有一些不寻常的行为需要考虑?
以下是一些细节,基于本网站上类似问题的答案:
到目前为止,大多数的SO的答案是,将阻止其工作的错误可言.任何人都可以帮助进行仅适用于iOS 8的图像调用吗?
我是一个相当有经验的iOS开发人员,但是一个完整的SceneKit新手,试图在一个基本的应用程序中模拟一些行星.
为此,我正在使用适用于基本球体的高分辨率火星,金星等的普通和漫反射贴图.他们工作!它们看起来很棒,正是我想要的.
问题是,我被质量/内存权衡所打死.
我可以缩小纹理的尺寸以减少内存占用,但是在某个分辨率以下,结果(特别是法线贴图)开始变得非常糊涂和可怕.应用程序需要能够至少缩放到行星的屏幕宽度,但为了保持山脉和山谷的任何清脆度,我需要使用大约6000 x 3000的PNG法线贴图(上图).我可以缩放漫反射地图的方式下降到大约1000 x 500,但即使这样,我也会从单个球体轻轻旋转中获得周期性的记忆崩溃,只有一个光,没有背景,没有物理,没有其他几何.
现在,我知道这是一张超高分辨率的普通地图.我知道了.但与此同时,它只是一个领域,什么都不做.这甚至没有接近我见过的其他应用程序执行完美的复杂性,即使有一些非常详细的纹理.似乎必须有一些方法可以为单个对象获取高细节表面纹理,而不会使应用程序崩溃.
所以,作为一个完整的SceneKit新手,我想知道:有没有任何技巧可以获得良好的SceneKit纹理质量而不使用世界上所有的内存? 也许一种处理图像纹理,重新编码文件,更改场景/节点设置等的方法?任何方式都可以通过较小的图像获得清晰的质量,或者使用相同的图像降低内存使用率?
我很乐意引用一些代码,但现在没有太多要显示的.我以标准方式将纹理应用于SceneKit节点,并且它可以工作.我只是因缺乏记忆或缺乏图像质量而死亡.
谁能帮我吗?
我注意到,在 iOS 和 macOS 上使用 ScreenTime 时,系统知道某些应用程序已连接到某些网站。例如,限制 Reddit 应用程序也会阻止我访问 Reddit.com。在停机期间将 Facebook 应用程序设置为始终允许也可以让我访问 Facebook.com。
我想以相同的方式将我的应用程序与我的网站相关联,但我不知道操作系统如何建立这些连接。我知道 ScreenTime 框架基本上不存在,所以这似乎不是答案,但不仅仅是 Apple 应用程序这样做,所以它似乎是开发人员可以访问的东西。
如何以这种方式将我的应用与特定网站 URL 相关联?
ios ×10
avfoundation ×2
scenekit ×2
uiimage ×2
xcode ×2
audiotoolbox ×1
imagenamed ×1
ios10 ×1
ios7 ×1
ios8 ×1
macos ×1
media-player ×1
memory ×1
objective-c ×1
pinchzoom ×1
textures ×1
uitableview ×1
uiwebview ×1