小编Dis*_*Dev的帖子

使用NSSortDescriptor通过多对多关系获取CoreData

我有2个CoreData实体(Person,Pet),它们具有以下关系:

一个人可以有多个宠物.因此,Person-> Pet存在To-Many关系.

我想取所有的人,根据宠物的数量排序,他们拥有宠物最多的人是第一个,宠物最少的人是最后一个.

在获取人员列表时,我尝试使用如下的NSSortDescriptor:

[NSSortDescriptor sortDescriptorWithKey:@"pets.count" ascending:NO]
Run Code Online (Sandbox Code Playgroud)

我认为"人"上的"宠物"属性允许我使用NSSet的count属性进行排序.唉,CoreData抱怨这个错误:

Fetch exception to-many key not allowed here
Run Code Online (Sandbox Code Playgroud)

这是一个完全错误的方法吗?我怎么能用CoreData fetch做这样的事情?

在此先感谢您的帮助.

core-data objective-c ios

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

在UIPageViewController中预加载下一页

我看了很多很多地方,还没有找到一些好的示例代码,展示如何在UIPageViewController中预加载"下一页".有对SO详细一些理论方面做了几个答案(见这个问题),但没有一个尚未发布的工作示例.

在我的应用程序的工作流程中,我每个屏幕显示1个页面,我希望预先加载"下一个"屏幕,因为实际上,滑动到下一页可能非常慢,有时需要2次滑动(如果你刷得太快)以便渲染和显示下一页.这提供了糟糕的用户体验.我并不关心预加载"之前"或任何其他屏幕,因为典型的工作流程是用户在移动到下一个屏幕(右侧)之前停留在屏幕上一段时间.我正在使用幻灯片动画(不卷曲).我以编程方式创建所有视图,并且根本不使用IB.

我试图在NSMutableArray中存储一些UIViewControllers并从那里加载控制器,但是要正常工作并且似乎没有加速任何事情是很棘手的.必须有一个很好的方法来做到这一点.

任何帮助是极大的赞赏.

uiswipegesturerecognizer uipageviewcontroller ios6

7
推荐指数
1
解决办法
3826
查看次数

如何在iOS应用收到新评级或评论时收到通知

当我的iOS应用程序在AppStore中收到新评级或评论时,我想收到某种通知.iTC Mobile应用程序无法在添加新评级时发现可以接收通知.

对于我的Android应用程序,我使用Andlytics,它会在添加新评论或评级时随时提供通知 - 是否有任何类似的人知道iOS?

我不在乎它是否是我的iPhone,电子邮件,短信或其他内容的推送通知 - 我只是想找到一种方式在这个事件发生时得到通知.

编辑:

我终于找到了完美的解决方案:LaunchKit w/slack integration.每次新的iOS评论出现时我都会收到一条消息,这很棒.

app-store ios

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

获取当前android.intent.category.LAUNCHER活动的实例

我创建了一个我在多个应用程序中共享的库项目.我实现了一个简单的会话到期功能,该功能会在一段时间后将用户踢回登录屏幕.

登录屏幕活动是我的主要活动,因此在清单中它看起来像这样:

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/Theme.Sherlock.Light.DarkActionBar"
    android:name="com.blah.application.MyApplication" >
    <activity
        android:name="com.blah.activity.LoginScreenActivity"
        android:label="@string/title_activity_main"
        android:screenOrientation="portrait"
        android:configChanges="orientation|keyboardHidden"
        android:windowSoftInputMode="adjustPan">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>
Run Code Online (Sandbox Code Playgroud)

当会话过期时,我想将用户踢回登录屏幕,但我不想硬编码活动的名称,因为它可能会有所不同,具体取决于使用该库的特定应用程序.这是我以前做的事情:

Intent intent = new Intent(context, LoginScreenActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
context.startActivity(intent);
Run Code Online (Sandbox Code Playgroud)

如果应用程序的主要活动与LoginScreenActivity不同,则此操作无效.我不想硬编码"LoginScreenActivity.class",我想以编程方式确定主类的名称,然后将用户引导到该活动...有人可以帮助我吗?

提前致谢!

编辑

我找到了一种方法来完成相同的最终结果,但它绝对不是很好.由于我使用相同的库(字符串,bool等)部署新应用程序需要一定的配置,因此我为strings.xml文件添加了一个字符串,用于定义"主"活动名称的特定应用程序对于该应用程序:

<string name="mainClassName">com.blah.specificapp.activity.SpecificAppLoginScreenActivity</string>
Run Code Online (Sandbox Code Playgroud)

然后我可以按名称获取该类的句柄并将用户重定向到那里:

Class<?> clazz = null;

try 
{
    clazz = Class.forName(context.getString(R.string.mainClassName));
} 
catch (ClassNotFoundException e) 
{
    // TODO Auto-generated catch block
    e.printStackTrace();
}

if(clazz != null)
{
    Intent intent = new Intent(context, clazz);
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    context.startActivity(intent);
}
Run Code Online (Sandbox Code Playgroud)

我知道这是一个可怕的解决方案,但它确实有效.就像我说的,无论如何我必须为每个新的应用程序做一些配置,所以添加一个字符串并不是一件很大的事情,它不是很优雅.我很感激任何可以在不使用我的黑客的情况下实现相同目标的建议.

android android-manifest android-intent

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

致命异常:在Android应用程序中调用静态方法时出现java.lang.NoClassDefFoundError

我们的一位测试人员使用运行Android 4.4.4的T-mobile Galaxy S4遇到了非常奇怪的NoClassDefFoundError崩溃.我完全不知道为什么会发生这些事情.

最新的一个是onCreateView在片段中调用静态方法时发生的.

MyCustomClass.getNumberOfItems(getActivity());
Run Code Online (Sandbox Code Playgroud)

失败了

致命异常:java.lang.NoClassDefFoundError com.mycompany.myapp.utilities.MyCustomClass $ 5

这是有问题的方法:

public static List<Item> getNumberOfItems(final Context context)
{
    List<Item> allFinishedItems = getAllFinishedItems(context);

    CollectionUtils.filter(allFinishedItems, new Predicate<Item>()
    {
        @Override
        public boolean evaluate(Item item)
        {
            // TODO Auto-generated method stub
            return isNonCustomItem(context, item);
        }
    });

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

1.)课程名称后面的"5美元"是什么?(回答:使用CollectionUtils.filter过滤匿名类的引用)2.)这个用户有另一个类似性质的崩溃,但是在一个通过gradle包含的库中有一个完全不同的静态方法调用.我在这个问题中引用的崩溃来自代码,它是我自己的库项目的一部分,同样的静态方法调用在应用程序的其他地方工作.这个问题似乎正在蔓延,或者至少不包含在1个类或1个库中.

我们的目标是build.gradle中的以下Android版本:

minSdkVersion 14
targetSdkVersion 22  (android 5.1)
Run Code Online (Sandbox Code Playgroud)

这可能会发生什么?另外需要注意的是,已签名的APK是使用Android Studio 2.0预览版4生成的.但是,该应用程序适用于20-30个其他beta测试人员,所以我对使用预览版Studio进行指责犹豫不决.

java android noclassdeffounderror android-gradle-plugin

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

调用getDrawingCache()时查看太大而无法适应绘图缓存

我正在尝试截取LinearLayout的内容.布局包含一个可以高度/宽度可变的滚动视图.当布局不是太大时(即您不需要在屏幕上滚动很多以查看所有内容),此代码可以正常工作:

View v1 = (LinearLayout)theLayout;

v1.setDrawingCacheEnabled(true);
Bitmap bitmap = Bitmap.createBitmap(v1.getDrawingCache());
v1.setDrawingCacheEnabled(false);
Run Code Online (Sandbox Code Playgroud)

但是,如果我尝试捕获的LinearLayout很大,则应用程序在v1.getDrawingCache()上使用空指针崩溃.

logcat中有一个错误:

05-11 13:16:20.999:W/View(17218):视图太大而无法适应绘图缓存,需要4784400字节,只有3932160可用

如何正确截取此布局的屏幕截图?还有另一种方法可以解决它没有使用如此多的内存吗?

android android-view

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

Android - 比较方法违反了其总合同

我已经看到了有关此异常的其他问题,但我的比较方法非常简单,我无法弄清楚它有什么问题,我无法使用我拥有的任何Android设备重现它.

我从我的Android应用程序的一些用户那里得到了这个例外,其中大多数似乎是在GS3或GS4这样的新设备上,我猜测它运行Java 7变种的合并排序.

这是我的比较方法:

            Collections.sort(collectionOfThings, new Comparator<Thing>()
            {
                public int compare(Thing lhs, Thing rhs) 
                {
                    //getDist() returns a Double with a capital D...perhaps that has something to do with it?
                    if(lhs.getDist() < rhs.getDist())
                    {
                        return -1;
                    }
                    if(lhs.getDist() == rhs.getDist())
                    {
                        return 0;
                    }

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

这是例外:

Caused by: java.lang.IllegalArgumentException: Comparison method violates its general contract!
    at java.util.TimSort.mergeLo(TimSort.java:743)
    at java.util.TimSort.mergeAt(TimSort.java:479)
    at java.util.TimSort.mergeCollapse(TimSort.java:404)
    at java.util.TimSort.sort(TimSort.java:210)
    at java.util.TimSort.sort(TimSort.java:169)
    at java.util.Arrays.sort(Arrays.java:2038)
    at java.util.Collections.sort(Collections.java:1891)
Run Code Online (Sandbox Code Playgroud)

似乎仅限于Android 4.0+.任何帮助是极大的赞赏.

java collections mergesort android

3
推荐指数
1
解决办法
5215
查看次数