小编fol*_*lex的帖子

"本机类尚未加载"我的绑定错误

我正在尝试为GPUImage项目创建绑定,但没有一个绑定类正在工作.例如,GPUImageView:

在ObjC中它被声明为这样(git中的头文件):

@interface GPUImageView : UIView <GPUImageInput>
//then some fields, properties and methods I'm not interested in
Run Code Online (Sandbox Code Playgroud)

所以,我的ApiDefinition.cs看起来像这样:

namespace GPUImage
{
    [BaseType (typeof(NSObject))]
    [Model]
    interface GPUImageInput {
    }

    [BaseType (typeof(UIView))]
    interface GPUImageView : GPUImageInput {
        [Export ("initWithFrame:")]
        IntPtr Constructor(RectangleF frame);
    }
}
Run Code Online (Sandbox Code Playgroud)

LinkWithAttributes:

[assembly: LinkWith ("libGPUImage.a", LinkTarget.Simulator | LinkTarget.ArmV7 | LinkTarget.ArmV7s, ForceLoad = true, Frameworks = "CoreMedia CoreVideo OpenGLES QuartzCore AVFoundation UIKit Foundation")]
Run Code Online (Sandbox Code Playgroud)

它构建好并创建DLL.但是当我尝试在我的项目中使用它时:

var iv = new GPUImageView (new RectangleF (0, 0, 100, 100));
Run Code Online (Sandbox Code Playgroud)

抛出异常: …

binding xamarin.ios ios gpuimage

10
推荐指数
1
解决办法
3018
查看次数

如何以编程方式重新加载行?

令人沮丧的事实:在召唤之后tableView:moveRowAtIndexPath:toIndexPath:,tableView:cellForRowAtIndexPath:不会被召唤出那一行.

在更新块reloadRowsAtIndexPaths:withRowAnimation:之后或之前调用也不起作用:它会引发不一致错误.tableView:moveRowAtIndexPath:toIndexPath:UITableView

我看到2个解决方法:删除+插入而不是移动或在另一个更新块中重新加载.

我的问题是:是否有其他方法可以重新加载并在同一个更新块中移动UITableView的行?

uitableview ios

9
推荐指数
1
解决办法
2297
查看次数

如何将参数传递给NSAction?

好吧,每个人都知道在ObjC我们有

+ (void)animateWithDuration:(NSTimeInterval)duration delay:(NSTimeInterval)delay options:(UIViewAnimationOptions)options animations:(void (^)(void))animations completion:(void (^)(BOOL finished))completion
Run Code Online (Sandbox Code Playgroud)

请注意,completion块具有BOOL参数.现在让我们来看看Monotouch:

public static void Animate (double duration, double delay, UIViewAnimationOptions options, NSAction animation, NSAction completion)
Run Code Online (Sandbox Code Playgroud)

NSAction是:

public delegate void NSAction ();
Run Code Online (Sandbox Code Playgroud)

只是没有任何争论的代表.此外,在Monotouch"内部"我们可以看到:

public static void Animate (double duration, double delay, UIViewAnimationOptions options, 
NSAction animation, NSAction completion)
{
    UIView.AnimateNotify (duration, delay, options, animation, delegate (bool x)
    {
        if (completion != null)
        {
            completion ();
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

注意delegate (bool x),它就像我需要的那样调用函数.现在,我如何通过Action<bool>完成UIView.Animate

c# uikit xamarin.ios uiviewanimation ios

7
推荐指数
2
解决办法
2471
查看次数

删除UITableView的部分后,标题视图的框架永远改变

我正在重复使用标题,将它们保存在字典中,其中节号是键,标题视图是值.

在我动画删除一个部分并重新加载另一个部分后,只有这些部分的标题视图"消失".经过一番搜索,我发现这些标题视图的帧已经改变了.Frame.X的从节头认为用删除UITableViewRowAnimationRight由屏幕宽度(320),并且这是realoaded与一个换档向右UITableViewRowAnimationAutomatic偏移了Y.

主要问题和困惑来自于我无法更改这些帧!好吧,他们一开始就改变了,但没有任何东西在视觉上改变,而另一个viewForHeaderInSection:帧的调用再次转移.

我是这样做的:

假设我们有3个部分,每个数据位于一个数组中_first,_second并且_third.我们打电话给按钮的touchupinside handleTouchUp:.(_second保持不变)

- (void) handleTouchUp: (UIButton *)sender
{
    if ([_first count] == 0) {
        sectionCount = 3;
        _first = [NSMutableArray arrayWithObjects: @"First 1", @"First 2", nil];
        _third = [NSMutableArray arrayWithObjects: @"Third 1", @"Third 2", @"Third 3", @"Third 4", @"Third 5", nil];
        [tableView reloadData];
    } else {
        sectionCount = 2;
        [_first removeAllObjects];
        _third = [NSMutableArray arrayWithObjects: @"First 1", …
Run Code Online (Sandbox Code Playgroud)

objective-c uitableview uiview ios

5
推荐指数
1
解决办法
1013
查看次数

当Crashlytics捕获异常时,应用程序崩溃

我已将Crashlytics集成到我的Xamarin.iOS项目中,Crashlytics启动,应用程序出现在crashlytics网站上.但是,当crashlytics捕获异常时,它会因下一个错误而崩溃:

信号%d,info%p,uapVoid%p

无法设置堆栈%s

我正在启动crashlytics并且AppDomain.CurrentDomain.UnhandledException像这样(方法描述):

public override bool FinishedLaunching (UIApplication app, NSDictionary options)
{
    IntPtr sigbus = Marshal.AllocHGlobal (512);
    IntPtr sigsegv = Marshal.AllocHGlobal (512);

    // Store Mono SIGSEGV and SIGBUS handlers
    sigaction (Signal.SIGBUS, IntPtr.Zero, sigbus);
    sigaction (Signal.SIGSEGV, IntPtr.Zero, sigsegv);

    ...

    Crashlytics.Crashlytics.StartWithAPIKey("myApiKeyHere");
    AppDomain.CurrentDomain.UnhandledException += (object sender, UnhandledExceptionEventArgs e) => {
        ...
    };

    sigaction (Signal.SIGBUS, sigbus, IntPtr.Zero);
    sigaction (Signal.SIGSEGV, sigsegv, IntPtr.Zero);

    Marshal.FreeHGlobal (sigbus);
    Marshal.FreeHGlobal (sigsegv);

    return true;
}
Run Code Online (Sandbox Code Playgroud)

crash crash-reports ios xamarin crashlytics

5
推荐指数
1
解决办法
958
查看次数

如何获取没有实例的Class对象?

有没有办法得到结果:

    NSObject *a = [[NSObject alloc] init];
    [a class];
Run Code Online (Sandbox Code Playgroud)

没有实例化?我希望将Class对象作为参数传递,然后检查它.像这样:

    - (void) pushControllerOfClass: (Class) aClass
    {
        if([aClass isSubclassOfClass: *what should I write here?*]) {
        ...
        }
    }
Run Code Online (Sandbox Code Playgroud)

直觉上,我试着写

        if([aClass isSubclassOfClass: UIViewController]) {
Run Code Online (Sandbox Code Playgroud)

但它不起作用.感谢未来的回应.

更新: 在ObjectiveC中这样的功能是否被认为是错误的?我从Nahavandipoor的书" iOS 5 Programming Cookbook"中重构了代码.就像那样:

- (void) pushSecondController{
    SecondViewController *secondController = [[SecondViewController alloc]
                                             initWithNibName:nil 
                                             bundle:NULL];
    [self.navigationController pushViewController:secondController animated:YES];
}
Run Code Online (Sandbox Code Playgroud)

至于我,这是一种不好的功能:它应该在没有参数的情况下进行参数化.

oop objective-c foundation nsobject ios

2
推荐指数
1
解决办法
1251
查看次数