小编alo*_*oko的帖子

通过RestKit将JSON的本地NSString反序列化为对象(无网络下载)

是否可以NSString通过RestKit将JSON 反序列化为对象?我在这里检查了API列表,找不到可以用于此目的的东西.我能找到的最接近的是NSDictionary解析输入后返回的各种解析器类.我假设RestKit在下载响应后使用这些解析器,所以我的想法是RestKit中的某个功能可用,但不公开.

如果我没有遗漏任何东西并且没有公开这个功能,那么替代方案是什么?两个明显的看起来不太有希望:获得结果NSDictionary并尝试反序列化自己(有效地重新实现RestKit)或尝试深入RestKit源并查看是否可以某种方式暴露(看起来单调乏味且容易出错).

在此先感谢您的帮助.

PS:我们的想法是,反序列化对象上的字符串属性实际上是另一组对象的JSON表示(在某种意义上是嵌入式JSON),并且在运行时根据需要进行反序列化.

iphone ios restkit

15
推荐指数
4
解决办法
7126
查看次数

释放由GLKTextureLoader分配的纹理(GLKTextureInfo对象)

在iOS 5上开发新功能,特别是iOS 5上新的OpenGL相关功能,所以如果我的任何问题都是如此基本,我会道歉.

我正在处理的应用程序旨在接收相机帧并通过OpenGL ES在屏幕上显示它们(图形人员将接管这个并添加我知道的实际OpenGL绘图).该应用程序是开发XCode4,目标是运行iOS 5的iPhone4.目前,我使用ARC和GLKit功能,除了在将图像加载为纹理时的内存泄漏,所有工作都正常.该应用程序很快就会收到"内存警告".

具体来说,我想问一下如何释放分配的纹理

@property(retain) GLKTextureInfo *texture;

-(void)setTextureCGImage:(CGImageRef)image 
{
    NSError *error;

    self.texture = [GLKTextureLoader textureWithCGImage:image options:nil error:&error];

    if (error) 
    {
        NSLog(@"Error loading texture from image: %@",error);
    }
}
Run Code Online (Sandbox Code Playgroud)

image是一个由相机框架构建的石英图像(来自苹果的示例代码).我知道问题不在代码的那一部分,因为如果我禁用分配,应用程序不会收到警告.

iphone ios opengl-es-2.0 ios5 glkit

11
推荐指数
2
解决办法
6089
查看次数

有条件地使用UINavigatonController在iOS 5应用程序中跳过UIViewController

在我们UIViewController一个接一个的三个s的iOS应用程序中,我们想根据某些条件跳过中间的一个,直接从第一个到第三个.但是,用户应该能够通过第三个控制器上的"后退"按钮返回第二个.

我试图[self performSegueWithIdentifier:@"segueId" sender:sender];viewDidLoad,viewWillAppear但这破坏了导航栏,由调试日志指示.调用此代码viewDidAppear工作正常,但第二个视图已经显示,这是我首先想要避免的.

我也试过[self.navigationController pushViewController:vc animated:NO];但结果是同样损坏的导航栏,即使这次调试日志没有这样的条目.

这样做的支持方式是什么(如果可能的话)?

目标是带有iOS 5.1的iPhone4,开发环境是Xcode 4.3.

iphone uiviewcontroller uinavigationcontroller ios segue

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

如何在Android上正确使用setZOrderMediaOverlay?

像许多其他人一样,我试图在相机预览(使用SurfaceView)上绘制3D对象(使用GLSurfaceView),并在顶部放置一些按钮.我实际上有一个原型工作,但我无法让onResume正常工作.在简历之后,GLSurfaceView会留在后面并且不再可见.我知道它正在工作,因为如果我从布局中删除SurfaceView,我可以看到绘图很好.

目标是Nexus One,运行库存2.3.3 ROM.

这是布局xml:

<com.example.cameratest.GLPreview 
        android:id="@+id/cubes" 
        android:layout_width="fill_parent" 
        android:layout_height="fill_parent"/> 

<com.example.cameratest.Preview 
        android:id="@+id/camera" 
        android:layout_width="fill_parent" 
        android:layout_height="fill_parent"/> 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/buttongroup" 
    android:orientation="vertical"
    android:layout_width="wrap_content"
    android:layout_height="fill_parent"
    android:layout_gravity="right" android:gravity="center">

    <Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_gravity="center" android:id="@+id/buttonClose"></Button>
    <Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_gravity="center" android:id="@+id/buttonMode"></Button>    
    <Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_gravity="center" android:id="@+id/buttonCameraInfo"></Button>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

<merge>

<code>

所有这些都包含在一个Preview块中,但出于某种原因,我无法将其包含在上面的SurfaceView列表中.setZOrderMediaOverlay()是扩展GLSurfaceView和实现相机预览逻辑的类.

这在活动启动时工作正常.在我启动另一个活动(例如,按下其中一个按钮)并完成该活动后,主活动将恢复,但3D对象不再可见.

我发现这个讨论的地方setZOrderMediaOverlay()有助于解决这个z排序问题.此外,setZOrderMediaOverlay()Android文档说"在将表面视图的包含窗口附加到窗口管理器之前"应该调用此函数.我不知道如何解释该语句,因此我将调试语句放在代码中以查看事件序列.这是onResume()代码的样子:


public class GLPreview extends GLSurfaceView
{
    private static final String TAG = "GLPreview";

    public GLPreview(Context context, AttributeSet attrs)
    {
        super(context, …
Run Code Online (Sandbox Code Playgroud)

android z-order surfaceview glsurfaceview

8
推荐指数
1
解决办法
1万
查看次数

C#:派生类上具有不同返回类型的属性

我试图寻找这个问题的答案,但找不到太多,很可能是因为我不知道如何正确地寻找它,所以这就是它.非常感谢所有帮助.

使用看起来像的基类

abstract public class Property
{
    private String name;

    public Property(String propertyName)
    { 
        name = propertyName; 
    }

    public String Name
    {
        get { return name; }
    }

    abstract public override String ToString();
}
Run Code Online (Sandbox Code Playgroud)

和派生类看起来像

public class StringProperty : Property
{
    private String value; // different properties for different types

    public StringProperty(String propertyName, String value) : base(propertyName)
    {
        this.value = value;
    }

    public String Value // different signature for different properties
    {
        get { return value; }
    }

    public override …
Run Code Online (Sandbox Code Playgroud)

c# polymorphism abstract-class overriding

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

在java项目中添加/修改注释

我们有一个Java代码库,我们打算在整个项目中使用它们.其中一些项目需要在此库中的Java对象中添加注释(即在一个项目中,这些对象将在JAX-RS servlet实现中使用,因此需要使用JAXB,JSON等注释进行注释).我遇到的问题是我无法弄清楚如何在不更改原始库的情况下添加这些注释.

考虑这个例子:

public class MyClass
{
    private String field1;
    private int field2;
}
Run Code Online (Sandbox Code Playgroud)

在某些项目中,我希望课程表现得像是一样

public class MyClass
{
    @Annotation1
    private String field1;
    @Annotation2
    private int field2;
}
Run Code Online (Sandbox Code Playgroud)

最初我考虑使用单独注释的接口或派生类,但无法弄清楚如何做(或者是否可能).我也发现了这个线程中的Javassist建议(即Java字节码操作方法),但问题是这需要在Android客户端上工作,所以它不适合我.在这一点上,我没有想法.

如果有人能以任何方式提供帮助,我将不胜感激.也许我错过了一些东西,或者我想要做的不是正确的方法.无论如何,我现在需要一些指导才能继续.

首先十分感谢.

java android annotations runtime

6
推荐指数
1
解决办法
910
查看次数

具有多个输入的Mybatis 3.0.5插入/更新语句映射

也许我遗漏了一些明显的东西,但我无法获得一个简单的映射插入语句成功执行.

使用以下界面

public interface CustomItemMapper 
{
    Integer insert(CustomItem item, @Param("extra") String someparam);
}
Run Code Online (Sandbox Code Playgroud)

以及以下XML映射

  <insert id="insert" useGeneratedKeys="false" parameterType="map" keyProperty="id">
    insert into CustomItem (id, column2, column3, column4, column5, column6)
        values (#{id}, #{field2}, #{field3}, #{field4}, #{field5}, #{extra})
  </insert>
Run Code Online (Sandbox Code Playgroud)

和这段代码

SqlSessionFactory sqlSessionFactory = (SqlSessionFactory) servletContext.getAttribute("SqlSessionFactory");
SqlSession session = sqlSessionFactory.openSession();
try 
{ 
    CustomItemMapper mapper = session.getMapper(CustomItemMapper.class); 
    mapper.update(item);
    session.commit();
} 
finally 
{ 
    session.close(); 
} 
Run Code Online (Sandbox Code Playgroud)

我得到以下调试输出:

Checked out connection 368716606 from pool.
ooo Connection Opened
==>  Executing: insert into CustomItem (id, column2, column3, column4, column5, column6) …
Run Code Online (Sandbox Code Playgroud)

java mapping persistence mybatis

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