У меня есть фреймворк, который создает некоторые представления, приложение, которое использует фреймворк, вызывает из него метод и передает его в текущем контроллере представления, тогда фреймворк затем вызывает presentModalViewController для отображения представления.ios7 пустой экран из фреймворка
Он отлично работал с iOS 6.1 SDK, но когда я обновился до Xcode 5 и iOS 7 SDK, я больше не вижу модального вида, вместо этого все, что я получаю, это пустой экран.
EDIT
Heres некоторые код:
рамочная называется "testityi"
testityi.m
#import "TestViewController.h"
@implementation testitiy
- (NSString*) sayHi : (NSString*) name {
return [NSString stringWithFormat:@"Hello %@", name];
}
- (void) displayView:(UIViewController *)parentController {
TestViewController* controller = [[TestViewController alloc] init];
[parentController presentViewController:controller animated:YES completion:nil];
}
TestViewController просто вид с ярлыком, который говорит «Вид из каркаса»
Сам фреймворк отлично работает, вызывая метод sayHi работает отлично.
приложения третьей стороны имеет вид с этикеткой и кнопкой, которая вызывает метод SayHi, а затем метод DisplayView, Херес код вида контроллера:
MainViewController.m
- (IBAction)buttonPressed:(id)sender {
testitiy* framework = [[testitiy alloc] init];
NSString* msg = [NSString stringWithFormat:@"Calling sayHi method on framework...\n result: %@", [framework sayHi:@"John"]];
UIAlertView* alert = [[UIAlertView alloc] initWithTitle:@"sayHi method call" message:msg delegate:self cancelButtonTitle:@"Ok, show me the view" otherButtonTitles:nil, nil];
[alert show];
}
-(void) alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
if(buttonIndex == [alertView cancelButtonIndex]) {
testitiy* framework = [[testitiy alloc] init];
[framework displayView:self];
}
}
Оповещения действия кнопки также работает правильно, я добавил NSLog раньше и его работу.
После нажатия кнопки предупреждения отображается представление, но вместо того, чтобы содержать метку «Вид из фреймворка», я получаю пустой экран.
Вы можете увидеть код на Github
EDIT 2
Я получил его ... Я не звал initWithBundle на ViewController из рамок, я добавил метод пользовательского инициализации что вызывает:
рамки: TestViewController.m
+ (NSBundle *)frameworkBundle {
static NSBundle* frameworkBundle = nil;
static dispatch_once_t predicate;
dispatch_once(&predicate, ^{
NSString* mainBundlePath = [[NSBundle mainBundle] resourcePath];
NSString* frameworkBundlePath = [mainBundlePath stringByAppendingPathComponent:@"testity.bundle"];
frameworkBundle = [NSBundle bundleWithPath:frameworkBundlePath];
});
return frameworkBundle;
}
- (id) initWithFramework {
NSBundle* bundle = [[self class] frameworkBundle];
self = [super initWithNibName:@"TestViewController" bundle: bundle];
return self;
}
И измененная testitiy.m
- (void) displayView:(UIViewController *)parentController {
TestViewController* controller = [[TestViewController alloc] initWithFramework];
[parentController presentViewController:controller animated:YES completion:nil];
//[parentController.navigationController pushViewController:controller animated:YES];
}
И теперь его работы ...
Я надеюсь, что это помогает кто-то еще, но я предполагаю, что это была глупая ошибка моя. Извините за все проблемы и спасибо за ваше время!
без какого-либо кода это сложно сказать. –
'presentModalViewController:' устарел. Посмотрите, работает ли соответствующий 'presentViewController: анимированный: завершение:'. – Kevin
Вбежал в собрание и сказал: «ой, ай, извините ... но что-то вроде как будто перестало работать» .... B ответил: «вы должны найти кого-нибудь, чтобы это исправить!» – Till