Comments (9)
Hi everyone,
I made it.
The root cause is that "aspect_isCompatibleBlockSignature" verifies that argument count of blockSignature and methodSignature,and if not matched ,nil returned.
You can see these code :
if (blockSignature.numberOfArguments > methodSignature.numberOfArguments) {
signaturesMatch = NO; //You will go here if wrong block parameters provided as above.
}else {
Now ,we can correct it by changing
[UIViewController aspect_hookSelector:@selector(viewDidLoad)
withOptions:AspectPositionBefore
usingBlock:^(id info, BOOL animated) {
to
[UIViewController aspect_hookSelector:@selector(viewDidLoad)
withOptions:AspectPositionBefore
usingBlock:^(id info) {
It works now for "viewDidLoad".
Hi @steipete,
I suggest to throw an exception here for developers to correct it to right things.
Thanks.
from aspects.
Hi, if you post some code I can help.
from aspects.
Steipete, I create a Category for UIViewcontroller, and have a Class method viewDidloadLogging:
- (void)viewDidloadLogging
{
[UIViewController aspect_hookSelector:@selector(viewDidLoad) withOptions:AspectPositionAfter usingBlock:^(idaspectInfo, BOOL animated){
NSLog(@"View Controller %@ will appear animated: %tu", [aspectInfo.instance class], animated);
NSLog(@"arguments:%@",[aspectInfo arguments]);
NSLog(@"originalInvocation:%@",[aspectInfo originalInvocation]);
} error:NULL];
}
In my demo AppDelegate,
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
[UIViewController viewDidloadLogging];
return YES;
}
There are no problems using?
from aspects.
+1
from aspects.
+1's don't help. Somebody who digs in and figures out what fails would help though. Thanks!
from aspects.
So that question answer is what,Steipete?^.^
from aspects.
This is the problem of execution order of [UIViewController viewDidLoad] and [UIViewController viewDidloadLogging]. Please make sure [UIViewController viewDidloadLogging] is invoked before [UIViewController viewDidLoad].
from aspects.
I got the same issue while hooking viewDidLoad selector of UIViewController class.
I can't call the block I provided but "dealloc" is working.
Can you figure out the solution?
Thanks a lot.
The code as following:
-
(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Ignore hooks when we are testing.
if (!NSClassFromString(@"XCTestCase")) {
[[LogManager sharedInstance] logViewControllerLifeCycle];
}
//...other code
} -
(void)logViewControllerLifeCycle
{
[UIViewController aspect_hookSelector:@selector(viewDidLoad)
withOptions:AspectPositionBefore
usingBlock:^(id info, BOOL animated) {
UIViewController *controller = [info instance];
NSString *key = NSStringFromClass([controller class]);
NSInteger refCount = [[self.dicViewControllerRefCount objectForKey:key] integerValue];
refCount++;
[self.dicViewControllerRefCount setObject:[NSString smc_stringFromInteger:refCount] forKey:key];
NSLog(@"%s %@ viewDidLoad",FUNCTION,key);
NSLog(@"%s alloc %@,%ld",FUNCTION,key,refCount);
} error:NULL];
//...other code
}
from aspects.
How can i use AspectPositionInstead option replace viewDidLoad method? Any help would be appreciated.
[MySubViewController aspect_hookSelector:@selector(viewDidLoad) withOptions:AspectPositionInstead usingBlock:^(id info){
//How can i use super here ???
// [super viewDidLoad];
WTSubViewController *vc = (WTSubViewController *)info.instance;
vc.view.backgroundColor = [UIColor blueColor];
} error:NULL];
from aspects.
Related Issues (20)
- ios12 Aspects 验出键盘 崩溃 HOT 1
- All superclasses get marked as having a subclass that is modified.
- Hook UIView frame?
- aspect does not support subclass?
- `doesNotRecognizeSelector` after removing hooks of subclass
- how to hooking a class method? HOT 4
- it does not work in swift 4.2 HOT 1
- pushViewController:animated:崩溃
- I
- It can not hook AppDelegate func in iOS13Beta
- Why not recommand aspect for production code ? HOT 1
- Xcode11.1 Crash
- JUST WANT TO SAY THANKS
- original implementation don't be call
- Crash with NSURL
- Is there support swift 5.0 plan? HOT 1
- Aspects how to hook instance method for all concrete class instances? HOT 3
- Error: viewDidLoad already hooked in TestViewController. A method can only be hooked once per class hierarchy. HOT 1
- hook viewWillAppear崩溃
- 苹果隐私清单是否需要支持,Does the Apple Privacy List(PrivacyInfo.xcprivacy) need support HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from aspects.