我在看这个问题.
其中一个答案显示了如何使用块向后传递数据查看prepareForSegue方法.我的理解是这种方法应该用于向前传递数据,而不是向后传递数据.
我想为此目的尝试阻塞 - 将数据传递回另一个viewController.
我的问题是:如何在不使用prepareForSegue方法的情况下执行此操作?我可以在例如UITableView中使用 - didselectRowAtIndexPath并且忽略视图 - 但接收视图如何被"通知"有数据返回,而不使用委托?
我已将Firebase SDK手动添加到我的项目中(由于配置问题,无法使用cocoapods).
使用以下框架:
FirebaseCore.framework
FirebaseInstanceID.framework
Firebasemessageing.framework
Run Code Online (Sandbox Code Playgroud)
在AppDelegate我已导入以下内容:
#import "Firebase.h
#import <FirebaseInstanceID/FirebaseInstanceID.h>
#import <FirebaseMessaging/FirebaseMessaging.h>
Run Code Online (Sandbox Code Playgroud)
然后我引用API:
[FIRApp configure];
Run Code Online (Sandbox Code Playgroud)
当我构建项目时,一切都很好.但是,只要应用程序遇到Firebase SDKAPI,我就会遇到以下崩溃:
控制台中的错误消息:
***由于未捕获的异常'NSInvalidArgumentException'终止应用程序,原因:'+ [NSData gtm_dataByGzippingData:错误:]:无法识别的选择器发送到类0x10553f168'
我已经添加了我能想到的所有必需的框架,但仍然遇到了这个问题.
我想一个添加UIView 到UIWindow使用appDelegate我使用这个代码:
NSArray *myViewArray = [[NSBundle mainBundle] loadNibNamed:@"View" owner:self options:nil];
UIView *myView = myViewArray[0];
UIWindow *window = [[[UIApplication sharedApplication] delegate] window];
myView.frame = CGRectMake(0, 0, 258, 564);
[myView setTag:100];
[window addSubview:myView];
Run Code Online (Sandbox Code Playgroud)
但这不起作用.如果我将它添加到我的self.view工作正常.但是,我希望此视图在出现时显示在所有其他视图上.
我在这做错了什么?
编辑
我使用了上一个SO问题中的代码:如何在UIBarButton项目下添加UIImage
它工作正常,没有问题.
但是在这个只有viewDidLoad方法和一个控制器的新项目中它不起作用.
我试过安装SO和谷歌,但似乎没有人有这个问题.
ViewControllers我的iOS应用程序中有两个.
在viewControllerA点击活动中我打电话:
[self performSegueWithIdentifier:@"fooSegue" sender:self];
Run Code Online (Sandbox Code Playgroud)
这称之为:
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
Run Code Online (Sandbox Code Playgroud)
上 viewControllerA
没问题.
但是那个方法之后,
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
Run Code Online (Sandbox Code Playgroud)
在调用viewControllerBviewDidLoad之前调用.viewController在这个阶段我不需要这个方法.伴随于此,viewDidLoad/ viewWillApear被调用两次后prepareForSegue已呼吁viewControllerB
我试着做一个堆栈strace来看看谁在调用它 - 但这就是我得到的:
* thread #1: tid = 0x5eac3, 0x0001e859 TestApp`-[viewControllerB prepareForSegue:sender:](self=0x0dad98b0, _cmd=0x0188185a, segue=0x0ce9e6f0, sender=0x0dad98b0) + 89 at viewControllerB.m:444, queue = 'com.apple.main-thread', stop reason = breakpoint 3.1 * frame #0: 0x0001e859 TestApp`-[ViewControllerB prepareForSegue:sender:](self=0x0dad98b0, _cmd=0x0188185a, segue=0x0ce9e6f0, sender=0x0dad98b0) + 89 at ViewControllerB.m:444
frame #1: 0x015f8efa UIKit`-[UIStoryboardSegueTemplate _perform:] + 156
frame …Run Code Online (Sandbox Code Playgroud) 我已经查看了有关该主题的各种SO问题,但我还没有找到解决方案.我有UIViewController一个UITableView和UICollectionView.UICollectionView当用户点击它时,我希望滚动到顶部.
文档说如果你有多个UiScrollView子类 - 你需要将它们设置为no并且你想要滚动到顶部的UiScrollView为yes.
所以我写了这段代码来完成我的所有观点:
for (UIScrollView *view in self.view.subviews) {
if ([view isKindOfClass:[UIScrollView class]]) {
view.scrollsToTop = NO;
}
}
self.collectionView.scrollsToTop = YES;
Run Code Online (Sandbox Code Playgroud)
这样我肯定UiScrollView的任何子类都将它的scrollsToTop属性设置为no.
但是,点击状态栏不会执行任何操作.
谁能告诉我这里缺少什么?
谢谢
我Dagger 2在我的Android应用程序中恭维.我按以下方式设置它:
AppComponent.java
@Singleton
@Component(modules = {
AndroidInjectionModule.class,
AndroidSupportInjectionModule.class,
ActivityBuilder.class,
AppModule.class,
DataBaseDaoModule.class
})
public interface AppComponent {
@Component.Builder
interface Builder {
@BindsInstance
Builder application(Application aApplication);
AppComponent build();
}
Application application();
void inject(MyApplication aApplication);
}
Run Code Online (Sandbox Code Playgroud)
AppInjector.java
ublic class AppInjector {
public static void init(MyApplication aApplication) {
//Initialize dagger and inject the aApplication
DaggerAppComponent.builder().application(aApplication).build().inject(aApplication);
aApplication.registerActivityLifecycleCallbacks(new Application.ActivityLifecycleCallbacks() {
@Override
public void onActivityCreated(Activity aActivity, Bundle aBundle) {
handleActivity(aActivity);
}
@Override
public void onActivityStarted(Activity aActivity) {
}
@Override
public void onActivityResumed(Activity aActivity) { …Run Code Online (Sandbox Code Playgroud) 我正在使用Dagger 2 DataBindng和新的Android Lifecycle组件,这些组件具有ViewModels。
在我的内部,ViewModel如何访问我的strings.xml?我在想,在第一,注入Context到viewModel,然而,这只会泄漏内存。
还有其他方法吗?
android android-context dagger-2 android-viewmodel android-architecture-components
使用AFNetworking 2.0 - 当使用NSDictionary参数执行get请求时 - 我的一个参数中包含一个% - 看起来AFNetworking在编码URL时将%25放在%前面 - 无论如何要阻止这个舞会发生?
嘿,我花了最后一天左右我的大脑尝试并且未能禁用ATS,我知道它也被认为是坏的,但我目前只在内部处理应用程序.我在网上尝试了很多建议无济于事,最新尝试下面的info.plist.我迷路了怎么办?
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>en</string>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>$(PRODUCT_NAME)</string>
<key>CFBundlePackageType</key>
<string>BNDL</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>1</string>
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>localhost</key>
<dict>
<!--Include to allow subdomains-->
<key>NSIncludesSubdomains</key>
<true/>
<!--Include to allow HTTP requests-->
<key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
<true/>
<!--Include to specify minimum TLS version-->
<key>NSTemporaryExceptionMinimumTLSVersion</key>
<string>TLSv1.1</string>
</dict>
</dict>
</dict>
</dict>
</plist>
Run Code Online (Sandbox Code Playgroud)
调试控制台错误打印
error =可选(错误域= NSURLErrorDomain代码= -1022"无法加载资源,因为App Transport Security策略要求使用安全连接."UserInfo = {NSUnderlyingError = 0x7f9670e85620 {Error Domain = kCFErrorDomainCFNetwork Code …
所以我想使用AFNetworking V2.0来获取NSURLSession的GET请求(iOS7的新API)
到目前为止,我已经得到了这个 - 但这是正确的方法吗?
NSString *tempURL =[NSString stringWithString:url];
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
[manager GET:tempURL parameters:params success:^(NSURLSessionDataTask *task, id responseObject)
{
//Working
}failure:^(NSURLSessionDataTask *task, NSError *error)
{
//Failed!!
}];
Run Code Online (Sandbox Code Playgroud)
这是正确的方法吗?
我试图用来Dagger 2注入我的应用程序类,MyApplication因为我在各种地方都使用它。这是我使用的设置Dagger 2.11
MyApplication.java
public class MyApplication extends Application implements HasActivityInjector {
@Inject
DispatchingAndroidInjector<Activity> dispatchingAndroidInjector;
@Override
public void onCreate() {
super.onCreate();
AppInjector.init(this);
}
@Override
public DispatchingAndroidInjector<Activity> activityInjector() {
return dispatchingAndroidInjector;
}
}
Run Code Online (Sandbox Code Playgroud)
AppInjector.java
public class AppInjector {
public static void init(MyApplication application){
//Initialize dagger and inject the application
DaggerAppComponent.builder().application(application).build().inject(application);
application.registerActivityLifecycleCallbacks(new Application.ActivityLifecycleCallbacks() {
@Override
public void onActivityCreated(Activity activity, Bundle aBundle) {
handleActivity(activity);
}
@Override
public void onActivityStarted(Activity activity) {
}
@Override
public void onActivityResumed(Activity activity) { …Run Code Online (Sandbox Code Playgroud) ios ×8
objective-c ×5
android ×3
dagger-2 ×3
java ×2
xcode ×2
android-architecture-components ×1
firebase ×1
ios9 ×1
iphone ×1
uiscrollview ×1
uiwindow ×1
xcode7 ×1