iOS应用程序显示记录器声称能够记录iOS设备的屏幕,即使它在后台.鉴于这UIGetScreenImage()是私有API,并且当Apple运行的静态分析检测到时,将导致拒绝提交应用程序,他们如何能够在批准的应用程序中进行此录制?
此外,应用程序会在记录时在屏幕顶部显示一个红色条,类似于原生iOS的电话功能.
我有一段时间以来一直是iOS开发人员,我对这个甚至是如何完成感到有点困惑,甚至在应用程序之外将红色条放在顶部的细节.我的印象是,当应用程序在后台运行时,我们基本上无法控制正在发生的事情,缺少一些关键功能(如音频播放等).
即使开发人员使用私有API /库来完成此任务,他们如何能够以审核期间未检测到的方式执行此操作?如果我遗漏了iOS的更高版本中引入的明显内容,我表示歉意.
我有一个去年建成的项目,它使用XIB,没有故事板.XIB不使用自动布局,但它们确实使用了一些自动调整大小.运行iOS7时出现问题,其中所有视图都隐藏在状态栏下.我完全理解这是iOS7的新功能,可以预期这一点.但是,所有用于修复它的解决方案都不起作用.我在视图顶部有一个图像,它总是显示在状态栏下面,我没有使用导航栏或类似的东西.
我已经尝试更新XIB中的Y-delta(它们对视图没有影响),我已经尝试设置edgesForExtendedLayout为UIRectEdgeNone(什么都不做),还有很多其他的东西.每次状态栏都显示隐藏在它下面的视图,无论我做什么......除非我手动向下移动XIB中的视图以留出状态栏的空间(但该解决方案不起作用,因为它当然,在iOS6中看起来并不正确.
奇怪的是,即使我尝试使用一行代码来破解视图移位,它也不起作用(如下所示):
self.view.frame = CGRectMake(self.view.frame.origin.x, self.view.frame.origin.y+20, self.view.frame.size.width, self.view.frame.size.height);
Run Code Online (Sandbox Code Playgroud)
..不是我会采用那种解决方案,但奇怪的是它不起作用(我通常看到不起作用的唯一一次是自动布局是否到位,在这种情况下不是这样).
这是状态栏显示的设计要求,我只是难以理解为什么我无法将视图设置为iOS7的状态栏.我已阅读有关该主题的每个Stack Overflow帖子,以及Apple的过渡/指南.再一次,重申一下,我完全理解它应该如何运作以及预期的解决方案应该是什么,但这些似乎都不适用于这个特定的项目.
我是一个经验丰富的iOS开发人员,但是这个项目是由另一个团队构建的,所以我不知道是否有某些东西隐藏在XIB文件,plist或代码中,可能超过上述设置.如果有其他可以查看的内容,或者我可以提供更多信息,请告诉我.
提前致谢!
我找不到针对给定JSON模式String验证JSON字符串的最简单方法(作为参考,这是在Java中,在Android应用程序中运行).
理想情况下,我只想传入一个JSON字符串和一个JSON模式字符串,并返回一个关于它是否通过验证的布尔值.通过搜索,我找到了以下2个有希望的库来完成这个:
https://github.com/fge/json-schema-validator
然而,第一个看起来相当过时,支持不力.我将库实现到我的项目中,即使使用他们的JavaDocs,我也无法告诉如何正确构建"Validator"对象进行验证.
类似的故事与第二个,似乎是最新的良好的测试代码.但是,对于我想要做的事情,这很简单,对于如何专门完成我想要的事情(甚至在查看ValidateServlet.java文件之后)似乎有点令人生畏和困惑.
好奇,如果有人有一个好的方法来完成这个(从它看起来),需要的简单任务,或者如果我可能需要坚持上面的第二个选项?提前致谢!
我是iOS(本地)开发人员,自从App Store问世以来.从那以后,我也学到了一些Windows-Phone和Android.我注意到在本机上构建HTML5网络应用程序的必然趋势,它似乎比我预期的增长更快.作为一个本地开发人员,这让我感到沮丧,因为大部分时间都有很多关于本地的论据,而且只有少数人会转向HTML5(即它是跨平台的!),但后面这几个论点似乎比前者更胜一筹.以及更多这些天,有时是无效的原因.
我并不认为移动应用程序的"未来"是HTML5,而是使用PhoneGap这样的工具,它可以实现跨平台的大规模分发.与原生应用相比,网络应用的体验总是低于标准,而且最重要的是,很多神话往往会浮现在它周围.例如,"客户不会为多个平台上的本地开发付费;它太贵了!" 这是一个神话,如果许多客户真正了解他们获得的应用程序质量的差异,他们将为此付出代价.行业领导者一次又一次地证明了这一点,他们在很大程度上并没有为客户构建网络应用程序.我甚至知道当CEO拿到他们外包的应用程序时发生的近乎诉讼,这是一个PhoneGap/HTML5应用程序.他(正当地)对承诺"应用程序"的公司感到愤怒,并想知道为什么它没有像其他应用程序一样感觉或回应,从而导致一团糟.
其他的神话包括HTML5路由节省了如此多的代码和时间,但情况并非如此.跨越设备/平台的测试,更不用说在这些平台上实现应用程序功能所涉及的CSS和javascript数量,通常会导致代码混乱,并且花费很多时间来调试相关问题.一个典型的本地开发人员可以在几个平台上在几个小时内弹出简单的基于列表的导航/详细视图,当它很可能需要大约相同的时间来构建HTML5以"模仿"并伪造相同的确切功能和外观/感觉.此外,通过PhoneGap/HTML5路线将始终确保您落后于平台和技术的前沿而不是前沿这一事实呢?
我最大的挫败感是,现在似乎有些开发商有时甚至向客户推荐PhoneGap/HTML5方法,因为它具有跨平台等的吸引力,甚至没有真正向客户解释(谁有时无能为力)它实际上涉及性能和外观/感觉的差异.
我当然希望跟上时代的步伐并为最坏的情况做好准备,这就是为什么我要开始学习这些工具的原因,但我很好奇你们(当地开发人员)是如何处理这种事情的?在我这个想法中,我一个人吗?关于如何以合理的方式向人们解释如何做出这个决策过程的任何建议?
在我收到有关此问题的回复之前,请注意我完全理解有时网络应用程序路由是正确的方式,我完全理解有些客户根本不会为本机付费,所以这是精细.我也明白,预测表明随着时间的推移,HTML5应用程序的百分比将继续上升.但是,我只是不同意"所有应用程序应该是HTML5的日益增长的心态,我们只是在使用原生作品时需要(即相机等)." 我的个人意见是,它应该是相反的:"所有应用程序都应该是原生的,除非在HTML5中更容易/更快地使用特定的UI和功能部分".公司可以找到快速编码的本机开发人员,并且可以访问代码库,从而使本机开发同样快,即使没有比通过Web应用程序更快的速度.
思考?如果这是一个错误的论坛,我会提前道歉,但我很想得到意见和建议.谢谢!-Vincent
我一直在努力解决这个问题,我想确保我这样做是正确的.作为参考,我使用AutoLayout和Storyboard,它是一个仅限iOS7的应用程序.
我有一个带标题视图的UITableView,并且HeaderView的UI连接在故事板中.我在故事板中留下了标题,它包含一些元素,其中一个是不可滚动的UITextView.
以下是它在故事板中的基本外观截图:

我将标题视图的背景变暗为深灰色,因此它很突出.
UITextView的文本可以是动态的,因此其高度需要根据文本的大小而改变.但棘手的部分是表的标题视图也需要调整其高度,具体取决于文本的大小.我已经尝试了一些带有约束的不同东西,但它并没有真正正常工作(除非我禁用AutoLayout并以编程方式重新调整大小,我真的很想避免).
当然,我希望尽可能使用尽可能少的代码.我并不依赖于使用表视图标题,尽管它可以很好地满足我的需求,因为我希望它和它包含的textview能够滚动下面的实际细节.但总而言之,如果有一种更简单的方法来实现这一目标(即使用uilabel),我将很乐意改变基础结构.
对方法的任何想法?没有找人帮助我的答案; 如果可能的话,只是寻找一些好的起点.提前致谢!
我试图在iOS7下使用AVAssetExportSession合并2个WAV文件.我已经确认文件在那里,似乎没有腐败或任何东西.这些是从设备本身完成的录制中获取的WAV文件,它们是相对较小的文件.
当它调用exportAsync方法时,它会立即在完成块中立即失败并出现"Operation Stopped"错误(原因描述为:"此媒体不支持该操作").这发生在模拟器和设备本身.请参阅下面的导出代码:
NSError *avError = nil;
NSFileManager *fileManager = [NSFileManager defaultManager];
AVURLAsset *tmpAsset = [[AVURLAsset alloc] initWithURL:_tmpRecordingUrl options:@{AVURLAssetPreferPreciseDurationAndTimingKey: @YES}];
AVURLAsset *permAsset = [[AVURLAsset alloc] initWithURL:_url options:@{AVURLAssetPreferPreciseDurationAndTimingKey: @YES}];
AVMutableComposition *composition = [AVMutableComposition composition];
[composition insertTimeRange:CMTimeRangeMake(kCMTimeZero, permAsset.duration) ofAsset:permAsset atTime:kCMTimeZero error:&avError];
[composition insertTimeRange:CMTimeRangeMake(kCMTimeZero, tmpAsset.duration) ofAsset:tmpAsset atTime:CMTimeMakeWithSeconds(_positionSlider.value, 1) error:&avError];
AVAssetExportSession *export = [[AVAssetExportSession alloc] initWithAsset:composition presetName:AVAssetExportPresetPassthrough];
if ([fileManager fileExistsAtPath:[_workingUrl path]]) {
[fileManager removeItemAtURL:_workingUrl error:&avError];
}
export.outputFileType = AVFileTypeWAVE;
export.outputURL = _workingUrl;
[export exportAsynchronouslyWithCompletionHandler:^(void) {
// fails
}];
Run Code Online (Sandbox Code Playgroud)
我还确认"avError"永远不会被填充,因此插入timeRanges或创建导出会话似乎没有问题.我检查了资产,它们都是可读的,可播放的和可导出的(根据obj上的bool值).
我错过了一些明显的东西吗?此代码适用于iOS6.如果我需要提供更多信息,请随时告诉我,并提前感谢您提供的任何方向!
编辑#1:我尝试添加跟踪机制,类似于这篇文章的内容:AVAssetExportSession - …
这个错误似乎偶尔会发生,这很奇怪.它通常很好,但偶尔会爬起来.这是我的代码,它位于BroadcastReceiver中:
public void onReceive(Context context, Intent intent) {
MyCustomResponseMsg message = new MyCustomResponseMsg((MyMessage) intent.getParcelableExtra(MyMessage.EXTRA_MESSAGE_KEY));
// do stuff with the message
setResultCode(Activity.RESULT_OK);
}
Run Code Online (Sandbox Code Playgroud)
以下是例外情况:
01-16 10:05:03.834: ERROR/AndroidRuntime(13533): FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to start receiver com.(path-to-broadcast-receiver).MyReqReceiver:
android.os.BadParcelableException: ClassNotFoundException when unmarshalling: com.(path-to-my-message).MyMessage
at android.app.ActivityThread.handleReceiver(ActivityThread.java:1805)
at android.app.ActivityThread.access$2400(ActivityThread.java:117)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:981)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:130)
at android.app.ActivityThread.main(ActivityThread.java:3683)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
at dalvik.system.NativeStart.main(Native Method)
Caused by: android.os.BadParcelableException: ClassNotFoundException when unmarshalling: com.(path-to-my-message).MyMessage
at android.os.Parcel.readParcelable(Parcel.java:1958)
at android.os.Parcel.readValue(Parcel.java:1846)
at android.os.Parcel.readMapInternal(Parcel.java:2083)
at android.os.Bundle.unparcel(Bundle.java:208)
at …Run Code Online (Sandbox Code Playgroud) android broadcastreceiver parcelable android-intent badparcelableexception
我遇到了请求权限背后的手动过程的问题(只是一直陷入'拒绝'代码),所以我切换到使用Dexter来简化.我在onCreate()中实现了以下代码,然后我对应用程序进行了全新安装:
Dexter.withActivity(this)
.withPermission(Manifest.permission.CAMERA)
.withListener(new PermissionListener() {
@Override public void onPermissionGranted(PermissionGrantedResponse response) {
Log.d(TAG, "GRANTED!");
initCamera();
}
@Override public void onPermissionDenied(PermissionDeniedResponse response) {
Log.d(TAG, "DENIED!");
}
@Override public void onPermissionRationaleShouldBeShown(PermissionRequest permission, PermissionToken token) {
Log.d(TAG, "PERMISSION RATIONAL SHOULD BE SHOWN!");
}
}).check();
Run Code Online (Sandbox Code Playgroud)
它立即陷入"拒绝!" 记录,它甚至从未提示过我.我尝试了这个特定的代码来尝试多个权限(这最终是我需要做的):
Dexter.withActivity(activity)
.withPermissions(Manifest.permission.CAMERA,
Manifest.permission.RECORD_AUDIO,
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE)
.withListener(new MultiplePermissionsListener() {
@Override
public void onPermissionsChecked(MultiplePermissionsReport report) {
Log.d(TAG, "Accepted: " + report.getGrantedPermissionResponses().size() + " | Denied: " + report.getDeniedPermissionResponses().get(0).getPermissionName());
}
@Override
public void onPermissionRationaleShouldBeShown(List<PermissionRequest> permissions, PermissionToken token) {
Log.d(TAG, "continuing …Run Code Online (Sandbox Code Playgroud) 我需要在我的Core Data存储中的两个表/模型上进行"连接"类型的操作,而我很难找到好的例子来获得这样的东西.
我需要做的事情相当简单.我有两个模型/表:locations和location_categories,其中locations包含位置/企业的详细信息(以及唯一的ID),location_categories表包含category_id和关联的location_id.我需要选择所有位置,给定category_id,它连接两个表/模型.如果它是直接SQL,它看起来像这样(当我针对实际的SQLite DB运行它时,此查询确实有效):
// pretend we passed in a catID of 29:
SELECT * FROM zlocation where zlocid in (select zlocid from zloccategory where zcatid = 29)
Run Code Online (Sandbox Code Playgroud)
所以你可以看到,它非常简单.有没有办法做到这一点,而不必做两个提取和for循环?我目前的目标-c代码如下所示,它工作正常,但由于两个表中有大量数据,它当然非常慢且效率低下.for循环导致了一个巨大的减速,我的直觉告诉我,这项工作确实应该在DB/Core-Data方面完成:
- (NSMutableArray *) fetchLocsWithCatID:(NSString *)catID {
NSMutableArray *retArr = [[NSMutableArray alloc] init];
NSManagedObjectContext *context = [self managedObjectContext];
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
[fetchRequest setEntity:[NSEntityDescription entityForName:MODELNAME_LOCCATEGORIES inManagedObjectContext:context]];
[fetchRequest setPredicate: [NSPredicate predicateWithFormat:@"catID == %@", catID]];
NSError *error;
NSArray *locCats = [context executeFetchRequest:fetchRequest error:&error];
NSArray *allLocsArr = [self fetchAllDataForTable:MODELNAME_LOCATION]; // this retrieves contents …Run Code Online (Sandbox Code Playgroud) 我的UIScrollview很长,超出了屏幕的宽度.请参阅以下屏幕截图以供参考.

我以编程方式在动态变化的for循环中向此滚动视图添加按钮.有一个"containerView"基本上与scrollview的宽度相同,我实际上是将按钮直接添加到它上面.代码很简单,如下所示:
for (int i=0; i<numberOfButtons; i++) {
UIButton *currentButton = [[UIButton alloc] init];
[currentButton setTranslatesAutoresizingMaskIntoConstraints:NO];
[currentButton setBackgroundImage:buttonImage forState:UIControlStateNormal];
[currentButton setTag:i];
[currentButton addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchUpInside];
[self.containerView addSubview:currentButton];
// here's where I programatically set constraints for positioning
}
Run Code Online (Sandbox Code Playgroud)
按钮在正确的位置显示完美,并且最初在屏幕上的按钮(即上面屏幕截图示例中的前2个)激活"buttonPressed:"方法完全正常.但是,最初屏幕外的显示仍然很好,但点击时不会触发事件.
我看到其他类似的帖子,但似乎没有任何效果.关于这个去哪里的任何想法?我有点难过.提前致谢!
ios ×7
iphone ×7
objective-c ×6
android ×4
ios7 ×2
autolayout ×1
core-data ×1
html5 ×1
java ×1
json ×1
jsonschema ×1
parcelable ×1
uiscrollview ×1
uitableview ×1
xcode ×1