使用NSManagedObjects数组覆盖现有Core Data

时间:2015-10-18 16:48:34

标签: ios swift core-data

我想要的应该是简单但由于某种原因它不能正常工作。因此,当我重新排列我的表视图时,每一行都以类似于表视图(从上到下)的顺序保存在数组N中作为NSManagedObject的子类。如果朋友视图显示两行,friend1和friend2,则friends为friend1,friends[0]为friend2。

每当表顺序发生变化时,我希望数据以与friends[1]数组中相同的顺序存储在核心数据中。

有没有简单的方法用我的friends数组替换所有核心数据?

3 个答案:

答案 0 :(得分:2)

Core Data中的默认集合类型为NSSet,这是一种无序类型。

  • 如果您想要按字母顺序排列标准订单,请在提取数据时提供NSSortDescriptor
  • 如果您想要自定义订单,请在数据模型中添加索引字段,并相应地为项目分配索引。更改表视图顺序时,请更新索引,然后再获取按索引排序的数据。

答案 1 :(得分:1)

如果您想管理与排序属性无关的订单,您可以建立关系" ordered"这将导致关系为package com.example.test; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.ServiceConnection; import android.os.Bundle; import android.os.IBinder; import android.support.v7.app.AppCompatActivity; import android.widget.Toast; public class MainActivity extends AppCompatActivity { MyService mService; boolean mBound = false; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // Bind this and the service together Intent noiseIntent = new Intent(this, MyService.class); bindService(noiseIntent, mConnection, Context.BIND_AUTO_CREATE); startService(noiseIntent); int num = mService.getRandomNumber(); Toast.makeText(this, "number: " + num, Toast.LENGTH_SHORT).show(); } /** Defines callbacks for service binding, passed to bindService() */ private ServiceConnection mConnection = new ServiceConnection() { @Override public void onServiceConnected(ComponentName className, IBinder service) { // We've bound to LocalService, cast the IBinder and get LocalService instance MyService.ServiceBinder binder = (MyService.ServiceBinder) service; mService = binder.getService(); mBound = true; } @Override public void onServiceDisconnected(ComponentName arg0) { mBound = false; } }; }

然后您可以根据需要操纵排序,当您枚举集合时,它将按照您规定的顺序进行操作。

但请注意,核心数据文档中规定的package com.example.test; import android.app.Service; import android.content.Intent; import android.os.Binder; import android.os.IBinder; import java.util.Random; public class MyService extends Service { // Binder given to clients private final IBinder mBinder = new ServiceBinder(); // Random number generator private final Random mGenerator = new Random(); /** * Class used for the client Binder. Because we know this service always * runs in the same process as its clients, we don't need to deal with IPC. */ public class ServiceBinder extends Binder { MyService getService() { // Return this instance of LocalService so clients can call public methods return MyService.this; } } @Override public IBinder onBind(Intent intent) { return mBinder; } /** * method for clients */ public int getRandomNumber() { return mGenerator.nextInt(100); } } 存在一些限制。

答案 2 :(得分:0)

核心数据中的对象没有顺序,就像Set。

一样

如果您的实体与朋友有多对多的关系,那么您可以使用NSOrderedSet来保持秩序。

或者,您可以设置一个属性,以便在从核心数据中获取对象时将订单索引作为排序条件。